cvs: /php4 NEWS /php4/ext/standard array.c
| From: | Thies C. Arntzen | 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;
}
}