POSIX says that 0[xX] prefix is _optional_ even in base 16 case, make it
really so. "If the value of base is 16, the characters 0x or 0X may optionally precede the sequence of letters and digits, following the sign if present." Found by: joerg
This commit is contained in:
parent
da1618943d
commit
b05ac67f5e
@ -75,7 +75,11 @@ strtoimax(const char * __restrict nptr, char ** __restrict endptr, int base)
|
||||
c = *s++;
|
||||
}
|
||||
if ((base == 0 || base == 16) &&
|
||||
c == '0' && (*s == 'x' || *s == 'X')) {
|
||||
c == '0' && (*s == 'x' || *s == 'X') &&
|
||||
((s[1] >= 'a' && s[1] <= 'f') ||
|
||||
(s[1] >= 'A' && s[1] <= 'F') ||
|
||||
(s[1] >= '0' && s[1] <= '9'))
|
||||
) {
|
||||
c = s[1];
|
||||
s += 2;
|
||||
base = 16;
|
||||
|
@ -76,7 +76,11 @@ strtol(const char * __restrict nptr, char ** __restrict endptr, int base)
|
||||
c = *s++;
|
||||
}
|
||||
if ((base == 0 || base == 16) &&
|
||||
c == '0' && (*s == 'x' || *s == 'X')) {
|
||||
c == '0' && (*s == 'x' || *s == 'X') &&
|
||||
((s[1] >= 'a' && s[1] <= 'f') ||
|
||||
(s[1] >= 'A' && s[1] <= 'F') ||
|
||||
(s[1] >= '0' && s[1] <= '9'))
|
||||
) {
|
||||
c = s[1];
|
||||
s += 2;
|
||||
base = 16;
|
||||
|
@ -75,7 +75,11 @@ strtoll(const char * __restrict nptr, char ** __restrict endptr, int base)
|
||||
c = *s++;
|
||||
}
|
||||
if ((base == 0 || base == 16) &&
|
||||
c == '0' && (*s == 'x' || *s == 'X')) {
|
||||
c == '0' && (*s == 'x' || *s == 'X') &&
|
||||
((s[1] >= 'a' && s[1] <= 'f') ||
|
||||
(s[1] >= 'A' && s[1] <= 'F') ||
|
||||
(s[1] >= '0' && s[1] <= '9'))
|
||||
) {
|
||||
c = s[1];
|
||||
s += 2;
|
||||
base = 16;
|
||||
|
@ -73,7 +73,11 @@ strtoul(const char * __restrict nptr, char ** __restrict endptr, int base)
|
||||
c = *s++;
|
||||
}
|
||||
if ((base == 0 || base == 16) &&
|
||||
c == '0' && (*s == 'x' || *s == 'X')) {
|
||||
c == '0' && (*s == 'x' || *s == 'X') &&
|
||||
((s[1] >= 'a' && s[1] <= 'f') ||
|
||||
(s[1] >= 'A' && s[1] <= 'F') ||
|
||||
(s[1] >= '0' && s[1] <= '9'))
|
||||
) {
|
||||
c = s[1];
|
||||
s += 2;
|
||||
base = 16;
|
||||
|
@ -73,7 +73,11 @@ strtoull(const char * __restrict nptr, char ** __restrict endptr, int base)
|
||||
c = *s++;
|
||||
}
|
||||
if ((base == 0 || base == 16) &&
|
||||
c == '0' && (*s == 'x' || *s == 'X')) {
|
||||
c == '0' && (*s == 'x' || *s == 'X') &&
|
||||
((s[1] >= 'a' && s[1] <= 'f') ||
|
||||
(s[1] >= 'A' && s[1] <= 'F') ||
|
||||
(s[1] >= '0' && s[1] <= '9'))
|
||||
) {
|
||||
c = s[1];
|
||||
s += 2;
|
||||
base = 16;
|
||||
|
@ -73,7 +73,11 @@ strtoumax(const char * __restrict nptr, char ** __restrict endptr, int base)
|
||||
c = *s++;
|
||||
}
|
||||
if ((base == 0 || base == 16) &&
|
||||
c == '0' && (*s == 'x' || *s == 'X')) {
|
||||
c == '0' && (*s == 'x' || *s == 'X') &&
|
||||
((s[1] >= 'a' && s[1] <= 'f') ||
|
||||
(s[1] >= 'A' && s[1] <= 'F') ||
|
||||
(s[1] >= '0' && s[1] <= '9'))
|
||||
) {
|
||||
c = s[1];
|
||||
s += 2;
|
||||
base = 16;
|
||||
|
Loading…
x
Reference in New Issue
Block a user