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
f3f8276732
commit
2571c7f720
@ -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