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

Reply via email to