]> granicus.if.org Git - php/commitdiff
Only skip leading 0's - fixes a test I broke a while ago
authorRasmus Lerdorf <rasmus@php.net>
Fri, 7 Aug 2009 17:14:19 +0000 (17:14 +0000)
committerRasmus Lerdorf <rasmus@php.net>
Fri, 7 Aug 2009 17:14:19 +0000 (17:14 +0000)
ext/standard/strnatcmp.c

index c3a8a820101083b1c92498a0fe149eca572cdacb..3a0e1ec5df4503c6ab8fba01cda43101f3f6a636 100644 (file)
@@ -105,7 +105,7 @@ PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len
        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,11 +116,15 @@ PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len
                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)) {