summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_llist.c16
-rw-r--r--Zend/zend_llist.h1
2 files changed, 17 insertions, 0 deletions
diff --git a/Zend/zend_llist.c b/Zend/zend_llist.c
index aabbe6ab21..2f5a011d4d 100644
--- a/Zend/zend_llist.c
+++ b/Zend/zend_llist.c
@@ -43,6 +43,22 @@ ZEND_API void zend_llist_add_element(zend_llist *l, void *element)
}
+ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element)
+{
+ zend_llist_element *tmp = pemalloc(sizeof(zend_llist_element)+l->size-1, l->persistent);
+
+ tmp->next = l->head;
+ tmp->prev = NULL;
+ if (l->head) {
+ l->head->prev = tmp;
+ } else {
+ l->tail = tmp;
+ }
+ l->head = tmp;
+ memcpy(tmp->data, element, l->size);
+}
+
+
ZEND_API void zend_llist_del_element(zend_llist *l, void *element)
{
zend_llist_element *current=l->head;
diff --git a/Zend/zend_llist.h b/Zend/zend_llist.h
index f268af9b97..6d2e3e83ba 100644
--- a/Zend/zend_llist.h
+++ b/Zend/zend_llist.h
@@ -36,6 +36,7 @@ typedef struct {
ZEND_API void zend_llist_init(zend_llist *l, size_t size, void (*dtor)(void *data), unsigned char persistent);
ZEND_API void zend_llist_add_element(zend_llist *l, void *element);
+ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element);
ZEND_API void zend_llist_del_element(zend_llist *l, void *element);
ZEND_API void zend_llist_destroy(zend_llist *l);
ZEND_API void zend_llist_clean(zend_llist *l);