rendered paste body--- zend_hash.old 2006-08-24 12:30:56.000000000 +0100
+++ zend_hash.new 2006-10-31 10:05:16.102177000 +0000
@@ -656,18 +656,24 @@
ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)
{
Bucket *p;
-
+ int retval;
+
IS_CONSISTENT(ht);
HASH_PROTECT_RECURSION(ht);
p = ht->pListHead;
while (p != NULL) {
- if (apply_func(p->pData TSRMLS_CC)) {
+ retval = apply_func(p->pData TSRMLS_CC);
+
+ if (ZEND_HASH_APPLY_STOP == retval) {
+ break;
+ } else if (retval == ZEND_HASH_APPLY_REMOVE) {
p = zend_hash_apply_deleter(ht, p);
} else {
p = p->pListNext;
}
}
+
HASH_UNPROTECT_RECURSION(ht);
}
@@ -675,13 +681,18 @@
ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *argument TSRMLS_DC)
{
Bucket *p;
+ int retval;
IS_CONSISTENT(ht);
HASH_PROTECT_RECURSION(ht);
p = ht->pListHead;
while (p != NULL) {
- if (apply_func(p->pData, argument TSRMLS_CC)) {
+ retval = apply_func(p->pData, argument TSRMLS_CC);
+
+ if (ZEND_HASH_APPLY_STOP == retval) {
+ break;
+ } else if (retval == ZEND_HASH_APPLY_REMOVE) {
p = zend_hash_apply_deleter(ht, p);
} else {
p = p->pListNext;
@@ -691,11 +702,12 @@
}
-ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t destruct, int num_args, ...)
+ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t apply_func, int num_args, ...)
{
Bucket *p;
va_list args;
zend_hash_key hash_key;
+ int retval;
IS_CONSISTENT(ht);
@@ -707,11 +719,17 @@
hash_key.arKey = p->arKey;
hash_key.nKeyLength = p->nKeyLength;
hash_key.h = p->h;
- if (destruct(p->pData, num_args, args, &hash_key)) {
+
+ retval = apply_func(p->pData, num_args, args, &hash_key);
+
+ if (ZEND_HASH_APPLY_STOP == retval) {
+ break;
+ } else if (retval == ZEND_HASH_APPLY_REMOVE) {
p = zend_hash_apply_deleter(ht, p);
} else {
p = p->pListNext;
}
+
va_end(args);
}