summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2000-11-13 14:55:28 +0000
committerStanislav Malyshev <stas@php.net>2000-11-13 14:55:28 +0000
commit124569d16747392f1b464dd53bbe2a4223a7fc23 (patch)
tree61c194ed05e2ff17418e6d72e6b1ff0c44ecc59d /Zend
parent39f8c9807eb7cbc65aec0d8895ba4fc483dfe2c1 (diff)
downloadphp-git-124569d16747392f1b464dd53bbe2a4223a7fc23.tar.gz
Fix zend_llist_apply_with_del - it should remove from list,
not only call dtor
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend_llist.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/Zend/zend_llist.c b/Zend/zend_llist.c
index e0798f1a91..4d78b6c0b6 100644
--- a/Zend/zend_llist.c
+++ b/Zend/zend_llist.c
@@ -63,26 +63,30 @@ ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element)
}
+#define DEL_LLIST_ELEMENT(current,l) \
+ if (current->prev) {\
+ current->prev->next = current->next;\
+ } else {\
+ l->head = current->next;\
+ }\
+ if (current->next) {\
+ current->next->prev = current->prev;\
+ } else {\
+ l->tail = current->prev;\
+ }\
+ if (l->dtor) {\
+ l->dtor(current->data);\
+ pefree(current, l->persistent);\
+ }
+
+
ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2))
{
zend_llist_element *current=l->head;
while (current) {
if (compare(current->data, element)) {
- if (current->prev) {
- current->prev->next = current->next;
- } else {
- l->head = current->next;
- }
- if (current->next) {
- current->next->prev = current->prev;
- } else {
- l->tail = current->prev;
- }
- if (l->dtor) {
- l->dtor(current->data);
- pefree(current, l->persistent);
- }
+ DEL_LLIST_ELEMENT(current,l);
break;
}
current = current->next;
@@ -147,10 +151,7 @@ ZEND_API void zend_llist_apply_with_del(zend_llist *l, int (*func)(void *data))
while (element) {
next = element->next;
if (func(element->data)) {
- if (l->dtor) {
- l->dtor(element->data);
- pefree(element, l->persistent);
- }
+ DEL_LLIST_ELEMENT(element,l);
}
element = next;
}