X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2F_PDCLIB%2Fstrtox_prelim.c;h=29b79197598ace1a5890738a72b20f4052844660;hb=54fc1aef7a9754a3daa803e47a59d76a8173d703;hp=d36837e49ae911369009643e7b383a88c18dc373;hpb=91af4888664608e3f47420110ed642c8d2dfc506;p=pdclib diff --git a/functions/_PDCLIB/strtox_prelim.c b/functions/_PDCLIB/strtox_prelim.c index d36837e..29b7919 100644 --- a/functions/_PDCLIB/strtox_prelim.c +++ b/functions/_PDCLIB/strtox_prelim.c @@ -8,6 +8,7 @@ #include #include +#include const char * _PDCLIB_strtox_prelim( const char * p, char * sign, int * base ) { @@ -24,6 +25,15 @@ const char * _PDCLIB_strtox_prelim( const char * p, char * sign, int * base ) { *base = 16; ++p; + /* catching a border case here: "0x" followed by a non-digit should + be parsed as the unprefixed zero. + We have to "rewind" the parsing; having the base set to 16 if it + was zero previously does not hurt, as the result is zero anyway. + */ + if ( memchr( _PDCLIB_digits, tolower(*p), *base ) == NULL ) + { + p -= 2; + } } else if ( *base == 0 ) {