fix simple_strtoul base 16 handling
Subsystems (2)
PATCH 1/1 fix simple_strtoul base 16 handling
I know it's simple_strtoul, but is it meant to be that simple? Fix up for both simple_strtoul and simple_strtoull.
simple_strtoul(0x401b, NULL, 0) = 0x401bsimple_strtoul(0X401b, NULL, 0) = 0x0simple_strtoul(0x401b, NULL, 16) = 0x0simple_strtoul(0X401b, NULL, 16) = 0x0
simple_strtoull(0x401b, NULL, 0) = 0x401bsimple_strtoull(0X401b, NULL, 0) = 0x0simple_strtoull(0x401b, NULL, 16) = 0x0simple_strtoull(0X401b, NULL, 16) = 0x0
Signed-off-by Chris Wright <[email protected]>
===== lib/vsprintf.c 1.22 vs edited =====
lib/vsprintf.c +8 -2
@@ -40,11 +40,14 @@if (*cp =='0' ) { base =8 ; cp++; -if ((*cp =='x' ) &&isxdigit (cp[1 ])) { +if ((toupper (*cp) =='X' ) &&isxdigit (cp[1 ])) { cp++; base =16 ; } } + }else if (base ==16 ) { +if (cp[0 ] =='0' &&toupper (cp[1 ]) =='X' ) + cp +=2 ; }while (isxdigit (*cp) && (value =isdigit (*cp) ? *cp-'0' :toupper (*cp)-'A' +10 ) < base) {
@@ -88,11 +91,14 @@if (*cp =='0' ) { base =8 ; cp++; -if ((*cp =='x' ) &&isxdigit (cp[1 ])) { +if ((toupper (*cp) =='X' ) &&isxdigit (cp[1 ])) { cp++; base =16 ; } } + }else if (base ==16 ) { +if (cp[0 ] =='0' &&toupper (cp[1 ]) =='X' ) + cp +=2 ; }while (isxdigit (*cp) && (value =isdigit (*cp) ? *cp-'0' : (islower (*cp) ?toupper (*cp) : *cp)-'A' +10 ) < base) {