X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2F_PDCLIB%2Fstrtox_prelim.c;h=6ff75c1282bf4021735e97e460e4f405d929d9cf;hb=b1fc26afebd4d557ff89a44bc21767a8704c3809;hp=69255278ac80eb70eb8ead79fbbcd0c26101da49;hpb=d02f38605b53cdff5460cc6b9e1b2a80c3a2ba4c;p=pdclib diff --git a/functions/_PDCLIB/strtox_prelim.c b/functions/_PDCLIB/strtox_prelim.c index 6925527..6ff75c1 100644 --- a/functions/_PDCLIB/strtox_prelim.c +++ b/functions/_PDCLIB/strtox_prelim.c @@ -1,7 +1,3 @@ -/* $Id$ */ - -/* Release $Name$ */ - /* _PDCLIB_strtox_prelim( const char *, char *, int * ) This file is part of the Public Domain C Library (PDCLib). @@ -9,6 +5,8 @@ */ #include +#include +#include const char * _PDCLIB_strtox_prelim( const char * p, char * sign, int * base ) { @@ -25,6 +23,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 ) {