svn: /php/php-src/ branches/PHP_5_2/ext/standard/strnatcmp.c branches/PHP_5_3/ext/standard/strnatcmp.c trunk/ext/standard/strnatcmp.c
| From: | Rasmus Lerdorf | Date: | Fri, 07 Aug 2009 17:14:19 +0000 |
| Subject: | svn: /php/php-src/ branches/PHP_5_2/ext/standard/strnatcmp.c branches/PHP_5_3/ext/standard/strnatcmp.c trunk/ext/standard/strnatcmp.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-60063@lists.php.net to get a copy of this message | ||
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');