lib: Improve _parse_integer_fixup_radix base 16 detection
Base autodetection is failing for this case: if test 257 -gt 3ae; then echo first; else echo second; fi It is because base for 3ae is recognized by _parse_integer_fixup_radix() as 10. The code detects the first char which is not between 'a'/'A' or 'f'/'F' to change base from dec to hex. Signed-off-by: Michal Simek <michal.simek@xilinx.com> Signed-off-by: Shiril Tichkule <shirilt@xlinx.com>
This commit is contained in:
parent
352f86bf86
commit
0486497e2b
15
lib/strto.c
15
lib/strto.c
@ -22,9 +22,22 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base)
|
||||
*base = 16;
|
||||
else
|
||||
*base = 8;
|
||||
} else
|
||||
} else {
|
||||
int i = 0;
|
||||
char var;
|
||||
|
||||
*base = 10;
|
||||
|
||||
do {
|
||||
var = tolower(s[i++]);
|
||||
if (var >= 'a' && var <= 'f') {
|
||||
*base = 16;
|
||||
break;
|
||||
}
|
||||
} while (var);
|
||||
}
|
||||
}
|
||||
|
||||
if (*base == 16 && s[0] == '0' && tolower(s[1]) == 'x')
|
||||
s += 2;
|
||||
return s;
|
||||
|
Loading…
Reference in New Issue
Block a user