diff options
author | ache <ache@FreeBSD.org> | 2005-01-21 00:42:13 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 2005-01-21 00:42:13 +0000 |
commit | b05ac67f5e11d06fc6eefd65556f036998a0a0bb (patch) | |
tree | d24a817d276208fdac47a21499eab3278d2f86ba /lib | |
parent | da1618943dd67cb16ec84958b0081c58b6005fa5 (diff) | |
download | FreeBSD-src-b05ac67f5e11d06fc6eefd65556f036998a0a0bb.zip FreeBSD-src-b05ac67f5e11d06fc6eefd65556f036998a0a0bb.tar.gz |
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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/stdlib/strtoimax.c | 6 | ||||
-rw-r--r-- | lib/libc/stdlib/strtol.c | 6 | ||||
-rw-r--r-- | lib/libc/stdlib/strtoll.c | 6 | ||||
-rw-r--r-- | lib/libc/stdlib/strtoul.c | 6 | ||||
-rw-r--r-- | lib/libc/stdlib/strtoull.c | 6 | ||||
-rw-r--r-- | lib/libc/stdlib/strtoumax.c | 6 |
6 files changed, 30 insertions, 6 deletions
diff --git a/lib/libc/stdlib/strtoimax.c b/lib/libc/stdlib/strtoimax.c index 0cb387b..147fce2 100644 --- a/lib/libc/stdlib/strtoimax.c +++ b/lib/libc/stdlib/strtoimax.c @@ -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; diff --git a/lib/libc/stdlib/strtol.c b/lib/libc/stdlib/strtol.c index 658628e..5aae7f9 100644 --- a/lib/libc/stdlib/strtol.c +++ b/lib/libc/stdlib/strtol.c @@ -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; diff --git a/lib/libc/stdlib/strtoll.c b/lib/libc/stdlib/strtoll.c index 2eb3a50..6cbe76a 100644 --- a/lib/libc/stdlib/strtoll.c +++ b/lib/libc/stdlib/strtoll.c @@ -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; diff --git a/lib/libc/stdlib/strtoul.c b/lib/libc/stdlib/strtoul.c index 2146a98..a8e3736 100644 --- a/lib/libc/stdlib/strtoul.c +++ b/lib/libc/stdlib/strtoul.c @@ -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; diff --git a/lib/libc/stdlib/strtoull.c b/lib/libc/stdlib/strtoull.c index 1720a8f..0e80b0d 100644 --- a/lib/libc/stdlib/strtoull.c +++ b/lib/libc/stdlib/strtoull.c @@ -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; diff --git a/lib/libc/stdlib/strtoumax.c b/lib/libc/stdlib/strtoumax.c index ddaee59..91d5d07 100644 --- a/lib/libc/stdlib/strtoumax.c +++ b/lib/libc/stdlib/strtoumax.c @@ -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; |