Re: [PATCH 1/3] diff --stat: allow custom diffstat output width.
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- Sep 29, 2006, 05:58 UTC
- Message-ID
- <Pine.LNX.4.64.0609282252430.3952@g5.osdl.org>
- In-Reply-To
- <7vr6xvp7jm.fsf@assigned-by-dhcp.cox.net>
On Thu, 28 Sep 2006, Junio C Hamano wrote:
Show 5 quoted lines
> > This is simply too clever; -pedantic does not like assignment of > arg to end (constness -- and strtoul takes pointer to non-const > char *, so making the type of end const char * is not an answer > either).
The _code_ really is right. The problem is "strtoul()" interfaces and a C typing oddity.
> And I do not like casting constness away: end = (char *) arg.
You could fix it by doing something like this:
static inline unsigned long sane_strtoul(const char *n,
const char **p,
int base)
{
char *end;
unsigned long res;res = strtoul(n, &end, base); *p = end; return res; }
because the only reason strtoul() warns now is that C type-rules don't allow the (obviously safe - but pointers migth have strange representations) conversion of "char **" into "const char **", even though "char *" can be converted into "const char *".
At that point, the cast is probably simpler, but the above should be strictly correct pedantic ANSI C.
I didn't even try it, though.
Linus