]> 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 ecd14b03b425a1c2a904763c7780a916f4aed5a6..03ccd4038003c89a3e28c58a8a6b83734072ae37 100644 (file)
@@ -105,18 +105,22 @@ PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len
 {
        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)) {