cvs: /php4 NEWS /php4/ext/standard array.c

From: Date: Sun, 14 Nov 1999 19:59:53 +0000
Subject: cvs: /php4 NEWS /php4/ext/standard array.c
Groups: php.version4 
Request: Send a blank email to php-version4+get-6224@lists.php.net to get a copy of this message
thies Sun Nov 14 14:59:53 1999 EDT Modified files: /php4 NEWS /php4/ext/standard array.c Log: (PHP k[r]sort) now use compare_function from libzend to be consistent with the language-core. Index: php4/NEWS diff -u php4/NEWS:1.31 php4/NEWS:1.32 --- php4/NEWS:1.31 Sun Nov 14 14:44:29 1999 +++ php4/NEWS Sun Nov 14 14:59:52 1999 @@ -6,8 +6,8 @@ - Fixed selecting nested-tables in OCI8. (Thies) - RFC-854 fix for internal FTP-Code. Commands have to end in "\r\n" (Thies) - Fix OpenLink ODBC support (Stig) -- min(),max(),a[r]sort(),[r]sort() now work consistent with the language-core. - (Thies) +- min(),max(),a[r]sort(),[r]sort(),k[r]sort() now work consistent with the + language-core. (Thies) - tempnam() now uses mkstemp() if available (Stig) - serialize() and var_dump() now honor the precision as set in php.ini for doubles. (Thies) Index: php4/ext/standard/array.c diff -u php4/ext/standard/array.c:1.1 php4/ext/standard/array.c:1.2 --- php4/ext/standard/array.c:1.1 Sat Nov 13 15:31:54 1999 +++ php4/ext/standard/array.c Sun Nov 14 14:59:52 1999 @@ -118,25 +118,44 @@ static int array_key_compare(const void *a, const void *b) { - Bucket *first; - Bucket *second; - int min, r; + Bucket *f; + Bucket *s; + pval result; + pval first; + pval second; + + f = *((Bucket **) a); + s = *((Bucket **) b); - first = *((Bucket **) a); - second = *((Bucket **) b); + if (f->nKeyLength == 0) { + first.type = IS_LONG; + first.value.lval = f->h; + } else { + first.type = IS_STRING; + first.value.str.val = f->arKey; + first.value.str.len = f->nKeyLength; + } + + if (s->nKeyLength == 0) { + second.type = IS_LONG; + second.value.lval = s->h; + } else { + second.type = IS_STRING; + second.value.str.val = s->arKey; + second.value.str.len = s->nKeyLength; + } + + if (compare_function(&result, &first, &second) == FAILURE) { + return 0; + } - if (first->nKeyLength == 0 && second->nKeyLength == 0) { - return (first->h - second->h); - } else if (first->nKeyLength == 0) { + convert_to_long(&result); + if (result.value.lval < 0) { return -1; - } else if (second->nKeyLength == 0) { + } else if (result.value.lval > 0) { return 1; - } - min = MIN(first->nKeyLength, second->nKeyLength); - if ((r = memcmp(first->arKey, second->arKey, min)) == 0) { - return (first->nKeyLength - second->nKeyLength); } else { - return r; + return 0; } }

« previous php.version4 (#6224) next »