]> granicus.if.org Git - php/commitdiff
Make zend_llist_remove_tail a void function
authorNikita Popov <nikic@php.net>
Sat, 13 Sep 2014 20:05:37 +0000 (22:05 +0200)
committerNikita Popov <nikic@php.net>
Sat, 13 Sep 2014 20:07:51 +0000 (22:07 +0200)
The returned data is already dtored and freed at this point.

Zend/zend_llist.c
Zend/zend_llist.h

index ad74bd56cb78eda3b66d0b08f9e4e83c640b94cc..0fb49abf5b46f1a7f776b3e15700eaf4755b0c08 100644 (file)
@@ -126,32 +126,26 @@ ZEND_API void zend_llist_clean(zend_llist *l)
 }
 
 
-ZEND_API void *zend_llist_remove_tail(zend_llist *l)
+ZEND_API void zend_llist_remove_tail(zend_llist *l)
 {
-       zend_llist_element *old_tail;
-       void *data;
-
-       if ((old_tail = l->tail)) {
-               if (old_tail->prev) {
-                       old_tail->prev->next = NULL;
-               } else {
-                       l->head = NULL;
-               }
-        
-               data = old_tail->data;
-
-               l->tail = old_tail->prev;
-               if (l->dtor) {
-                       l->dtor(data);
-               }
-               pefree(old_tail, l->persistent);
-
-               --l->count;
+       zend_llist_element *old_tail = l->tail;
+       if (!old_tail) {
+               return;
+       }
 
-               return data;
+       if (old_tail->prev) {
+               old_tail->prev->next = NULL;
+       } else {
+               l->head = NULL;
        }
 
-       return NULL;
+       l->tail = old_tail->prev;
+       --l->count;
+       
+       if (l->dtor) {
+               l->dtor(old_tail->data);
+       }
+       pefree(old_tail, l->persistent);
 }
 
 
index b05ece8077a6f714f3fa01315d0637021afda6a2..602884c27dafe400d678bbd21fe721568bdfd4c9 100644 (file)
@@ -53,7 +53,7 @@ ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element);
 ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2));
 ZEND_API void zend_llist_destroy(zend_llist *l);
 ZEND_API void zend_llist_clean(zend_llist *l);
-ZEND_API void *zend_llist_remove_tail(zend_llist *l);
+ZEND_API void zend_llist_remove_tail(zend_llist *l);
 ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src);
 ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func TSRMLS_DC);
 ZEND_API void zend_llist_apply_with_del(zend_llist *l, int (*func)(void *data));