From: Rasmus Lerdorf Date: Fri, 7 Aug 2009 17:14:19 +0000 (+0000) Subject: Only skip leading 0's - fixes a test I broke a while ago X-Git-Tag: php-5.4.0alpha1~191^2~2831 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=88849ce51131107bf71963b8b4f6b802f50d7469;p=php Only skip leading 0's - fixes a test I broke a while ago --- diff --git a/ext/standard/strnatcmp.c b/ext/standard/strnatcmp.c index ecd14b03b4..03ccd40380 100644 --- a/ext/standard/strnatcmp.c +++ b/ext/standard/strnatcmp.c @@ -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)) {