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:
Michal Simek 2020-02-07 13:04:10 +01:00
parent 352f86bf86
commit 0486497e2b

View file

@ -22,9 +22,22 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base)
*base = 16; *base = 16;
else else
*base = 8; *base = 8;
} else } else {
int i = 0;
char var;
*base = 10; *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') if (*base == 16 && s[0] == '0' && tolower(s[1]) == 'x')
s += 2; s += 2;
return s; return s;