rasmus Fri, 07 Aug 2009 17:14:19 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=286915
Log: Only skip leading 0's - fixes a test I broke a while ago Changed paths: U php/php-src/branches/PHP_5_2/ext/standard/strnatcmp.c U php/php-src/branches/PHP_5_3/ext/standard/strnatcmp.c U php/php-src/trunk/ext/standard/strnatcmp.c Modified: php/php-src/branches/PHP_5_2/ext/standard/strnatcmp.c =================================================================== --- php/php-src/branches/PHP_5_2/ext/standard/strnatcmp.c 2009-08-07 15:45:56 UTC (rev 286914) +++ php/php-src/branches/PHP_5_2/ext/standard/strnatcmp.c 2009-08-07 17:14:19 UTC (rev 286915) @@ -105,7 +105,7 @@ char const *ap, *bp; char const *aend = a + a_len, *bend = b + b_len; - int fractional, result; + int fractional, result, leading = true; if (a_len == 0 || b_len == 0) return a_len - b_len; @@ -116,12 +116,16 @@ ca = *ap; cb = *bp; /* skip over leading spaces or zeros */ - while (isspace((int)(unsigned char)ca) || (ca == '0' && (ap+1 < aend) && !ispunct(*(ap+1)))) + while (leading && (isspace((int)(unsigned char)ca) || (ca == '0' && (ap+1 < aend) && !ispunct(*(ap+1))))) { ca = *++ap; + } - while (isspace((int)(unsigned char)cb) || (cb == '0' && (bp+1 < bend) && !ispunct(*(bp+1)))) + while (leading && (isspace((int)(unsigned char)cb) || (cb == '0' && (bp+1 < bend) && !ispunct(*(bp+1))))) { cb = *++bp; + } + leading = false; + /* process run of digits */ if (isdigit((int)(unsigned char)ca) && isdigit((int)(unsigned char)cb)) { fractional = (ca == '0' || cb == '0'); Modified: php/php-src/branches/PHP_5_3/ext/standard/strnatcmp.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/standard/strnatcmp.c 2009-08-07 15:45:56 UTC (rev 286914) +++ php/php-src/branches/PHP_5_3/ext/standard/strnatcmp.c 2009-08-07 17:14:19 UTC (rev 286915) @@ -105,7 +105,7 @@ char const *ap, *bp; char const *aend = a + a_len, *bend = b + b_len; - int fractional, result; + int fractional, result, leading = true; if (a_len == 0 || b_len == 0) return a_len - b_len; @@ -116,12 +116,16 @@ ca = *ap; cb = *bp; /* skip over leading spaces or zeros */ - while (isspace((int)(unsigned char)ca) || (ca == '0' && (ap+1 < aend) && !ispunct(*(ap+1)))) + while (leading && (isspace((int)(unsigned char)ca) || (ca == '0' && (ap+1 < aend) && !ispunct(*(ap+1))))) { ca = *++ap; + } - while (isspace((int)(unsigned char)cb) || (cb == '0' && (bp+1 < bend) && !ispunct(*(bp+1)))) + while (leading && (isspace((int)(unsigned char)cb) || (cb == '0' && (bp+1 < bend) && !ispunct(*(bp+1))))) { cb = *++bp; + } + leading = false; + /* process run of digits */ if (isdigit((int)(unsigned char)ca) && isdigit((int)(unsigned char)cb)) { fractional = (ca == '0' || cb == '0'); Modified: php/php-src/trunk/ext/standard/strnatcmp.c =================================================================== --- php/php-src/trunk/ext/standard/strnatcmp.c 2009-08-07 15:45:56 UTC (rev 286914) +++ php/php-src/trunk/ext/standard/strnatcmp.c 2009-08-07 17:14:19 UTC (rev 286915) @@ -105,19 +105,23 @@ { unsigned char ca, cb; unsigned int ai, bi; - int fractional, result; + int fractional, result, leading = true; ai = bi = 0; while (1) { ca = a[ai]; cb = b[bi]; /* skip over leading spaces or zeros */ - while (isspace((int)(unsigned char)ca) || ((ca == '0' && (ai+1 < a_len)) && !ispunct(a[ai+1]))) + while (leading && (isspace((int)(unsigned char)ca) || ((ca == '0' && (ai+1 < a_len)) && !ispunct(a[ai+1])))) { ca = a[++ai]; + } - while (isspace((int)(unsigned char)cb) || ((cb == '0' && bi+1 < b_len) && !ispunct(b[bi+1]))) + while (leading && (isspace((int)(unsigned char)cb) || ((cb == '0' && bi+1 < b_len) && !ispunct(b[bi+1])))) { cb = b[++bi]; + } + leading = false; + /* process run of digits */ if (isdigit((int)(unsigned char)ca) && isdigit((int)(unsigned char)cb)) { fractional = (ca == '0' || cb == '0');
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php