mirror of
http://galexander.org/git/simplesshd.git
synced 2024-12-29 09:28:07 +00:00
50 lines
840 B
C
50 lines
840 B
C
#include "options.h"
|
|
#include "dbutil.h"
|
|
#include "list.h"
|
|
|
|
void list_append(m_list *list, void *item) {
|
|
m_list_elem *elem;
|
|
|
|
elem = m_malloc(sizeof(*elem));
|
|
elem->item = item;
|
|
elem->list = list;
|
|
elem->next = NULL;
|
|
if (!list->first) {
|
|
list->first = elem;
|
|
elem->prev = NULL;
|
|
} else {
|
|
elem->prev = list->last;
|
|
list->last->next = elem;
|
|
}
|
|
list->last = elem;
|
|
}
|
|
|
|
m_list * list_new() {
|
|
m_list *ret = m_malloc(sizeof(m_list));
|
|
ret->first = ret->last = NULL;
|
|
return ret;
|
|
}
|
|
|
|
void * list_remove(m_list_elem *elem) {
|
|
void *item = elem->item;
|
|
m_list *list = elem->list;
|
|
if (list->first == elem)
|
|
{
|
|
list->first = elem->next;
|
|
}
|
|
if (list->last == elem)
|
|
{
|
|
list->last = elem->prev;
|
|
}
|
|
if (elem->prev)
|
|
{
|
|
elem->prev->next = elem->next;
|
|
}
|
|
if (elem->next)
|
|
{
|
|
elem->next->prev = elem->prev;
|
|
}
|
|
m_free(elem);
|
|
return item;
|
|
}
|