Messages in this thread | | | Date | Fri, 8 Nov 2002 14:41:36 -0500 (EST) | From | "Richard B. Johnson" <> | Subject | Re: [PATCH] Re: sscanf("-1", "%d", &i) fails, returns 0 |
| |
On Fri, 8 Nov 2002, Randy.Dunlap wrote:
> On Sat, 9 Nov 2002, Douglas Gilbert wrote: > > | In lk 2.5.46-bk3 the expression in the subject line > | fails to write into "i" and returns 0. Drop the minus > | sign and it works. > > Here's an unobstrusive patch to correct that. > Please apply. > > -- > ~Randy > > > > --- ./lib/vsprintf.c%signed Mon Nov 4 14:30:49 2002 > +++ ./lib/vsprintf.c Fri Nov 8 11:20:03 2002 > @@ -517,6 +517,7 @@ > { > const char *str = buf; > char *next; > + char *dig; > int num = 0; > int qualifier; > int base; > @@ -638,12 +639,13 @@ > while (isspace(*str)) > str++; > > - if (!*str > - || (base == 16 && !isxdigit(*str)) > - || (base == 10 && !isdigit(*str)) > - || (base == 8 && (!isdigit(*str) || *str > '7')) > - || (base == 0 && !isdigit(*str))) > - break; > + dig = (*str == '-') ? (str + 1) : str; > + if (!*dig > + || (base == 16 && !isxdigit(*dig)) > + || (base == 10 && !isdigit(*dig)) > + || (base == 8 && (!isdigit(*dig) || *dig > '7')) > + || (base == 0 && !isdigit(*dig))) > + break; > > switch(qualifier) { > case 'h': > > -
I was thinking that if anybody ever had to change any of this stuff, it might be a good idea to do the indirection only once? All those "splats" over and over again are costly.
Cheers, Dick Johnson Penguin : Linux version 2.4.18 on an i686 machine (797.90 BogoMips). Bush : The Fourth Reich of America
- 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/
| |