mirror of
https://codeberg.org/landley/toybox.git
synced 2026-01-26 14:13:25 +00:00
Add dlist_lpop() to remove last entry (use dlist as stack).
This commit is contained in:
parent
4c6f35ea52
commit
c3ccbbc4ff
@ -45,6 +45,7 @@ void llist_free_double(void *node);
|
||||
void llist_traverse(void *list, void (*using)(void *node));
|
||||
void *llist_pop(void *list); // actually void **list
|
||||
void *dlist_pop(void *list); // actually struct double_list **list
|
||||
void *dlist_lpop(void *list); // also struct double_list **list
|
||||
void dlist_add_nomalloc(struct double_list **list, struct double_list *new);
|
||||
struct double_list *dlist_add(struct double_list **list, char *data);
|
||||
void *dlist_terminate(void *list);
|
||||
|
||||
16
lib/llist.c
16
lib/llist.c
@ -51,6 +51,7 @@ void *llist_pop(void *list)
|
||||
return (void *)next;
|
||||
}
|
||||
|
||||
// Remove first item from &list and return it
|
||||
void *dlist_pop(void *list)
|
||||
{
|
||||
struct double_list **pdlist = (struct double_list **)list, *dlist = *pdlist;
|
||||
@ -66,6 +67,21 @@ void *dlist_pop(void *list)
|
||||
return dlist;
|
||||
}
|
||||
|
||||
// remove last item from &list and return it (stack pop)
|
||||
void *dlist_lpop(void *list)
|
||||
{
|
||||
struct double_list *dl = *(struct double_list **)list;
|
||||
void *v = 0;
|
||||
|
||||
if (dl) {
|
||||
dl = dl->prev;
|
||||
v = dlist_pop(&dl);
|
||||
if (!dl) *(void **)list = 0;
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
void dlist_add_nomalloc(struct double_list **list, struct double_list *new)
|
||||
{
|
||||
if (*list) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user