Messages in this thread | | | Date | Tue, 20 Feb 2007 09:19:31 +0100 | From | "Francis Moreau" <> | Subject | Re: memparse(), simple_strtoul() prototypes... |
| |
On 2/19/07, Avi Kivity <avi@argo.co.il> wrote: > Francis Moreau wrote: > >> > unsigned long simple_strtoul(const char *cp, char **endp,unsigned > >> int base) > > > > hm, I don't get your point. I understand why we cast 'cp' into a (char > > *) but that's not my point. My point is why aren't all function > > parameters are not const ? > > > > 'cp' can be passed as const, because simple_strtoul() does not modify > it. 'endp' cannot be passed as const, because simple_strtoul() cannot > know whether the caller would want to modify the string or not. > > Whichever way it is written, it is broken. If changed to 'const', it > would preclude the caller from modifying the string if one has a > non-const string. As written, it can silently convert a const string to > a non-const string. However, as written it is (a) standard conforming, > and (b) more useful. >
ok I think I finally got it and I agree that both ways are broken.
Maybe changing simple_strtoul() prototype as follow would be better ?
int simple_strtoul(const char *cp, unsigned long *value, unsigned base)
the function would return the number of parsed char, and 'value' would be the result. -- Francis - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |