-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
I found the following little bug in 2.4.19. I did not try newer kernels.
vsscanf refuses to convert a hex number starting with a nondecimal digit like:
char *buf="ff";
unsigned ff=0;
sscanf( buf, "%x", &ff ); /* fails: nothing is converted */
Here is a patch that corrects that behaviour:
- --- linux/lib/vsprintf.c 2001-10-11 20:17:22.000000000 +0200
+++ linux.patched/lib/vsprintf.c 2003-03-11 11:52:08.000000000 +0100
@@ -637,7 +637,7 @@
while (isspace(*str))
str++;
- - if (!*str || !isdigit(*str))
+ if (!*str || !(isdigit(*str) || (base==16 && isxdigit(*str))))
break;
switch(qualifier) {
Torsten
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)
iD8DBQE+bcI7wicyCTir8T4RAgsPAKCZtX+R9tljalegoC4z7xbTo3p38ACfUIYv
5xgo+tQqj8TZmQOM4W0MqqY=
=D9hc
-----END PGP SIGNATURE-----
On Tuesday 11 March 2003 12:02, Torsten Foertsch wrote:
Hi Torsten,
> I found the following little bug in 2.4.19. I did not try newer kernels.
> vsscanf refuses to convert a hex number starting with a nondecimal digit
> like:
> char *buf="ff";
> unsigned ff=0;
> sscanf( buf, "%x", &ff ); /* fails: nothing is converted */
>
> Here is a patch that corrects that behaviour:
>
> --- linux/lib/vsprintf.c 2001-10-11 20:17:22.000000000 +0200
> +++ linux.patched/lib/vsprintf.c 2003-03-11 11:52:08.000000000 +0100
> @@ -637,7 +637,7 @@
> while (isspace(*str))
> str++;
>
> - if (!*str || !isdigit(*str))
> + if (!*str || !(isdigit(*str) || (base==16 &&
> isxdigit(*str)))) break;
>
> switch(qualifier) {
http://marc.theaimsgroup.com/?l=linux-kernel&m=104687957102846&w=2
This fix was first posted since early 2.4.18-pre stage.
ciao, Marc