Line | Count | Source |
1 | | #include "includes.h" |
2 | | #include "dbutil.h" |
3 | | #include "list.h" |
4 | | |
5 | 0 | void list_append(m_list *list, void *item) { |
6 | 0 | m_list_elem *elem; |
7 | | |
8 | 0 | elem = m_malloc(sizeof(*elem)); |
9 | 0 | elem->item = item; |
10 | 0 | elem->list = list; |
11 | 0 | elem->next = NULL; |
12 | 0 | if (!list->first) { |
13 | 0 | list->first = elem; |
14 | 0 | elem->prev = NULL; |
15 | 0 | } else { |
16 | 0 | elem->prev = list->last; |
17 | 0 | list->last->next = elem; |
18 | 0 | } |
19 | 0 | list->last = elem; |
20 | 0 | } |
21 | | |
22 | 0 | m_list * list_new() { |
23 | 0 | m_list *ret = m_malloc(sizeof(m_list)); |
24 | 0 | ret->first = ret->last = NULL; |
25 | 0 | return ret; |
26 | 0 | } |
27 | | |
28 | 0 | void * list_remove(m_list_elem *elem) { |
29 | 0 | void *item = elem->item; |
30 | 0 | m_list *list = elem->list; |
31 | 0 | if (list->first == elem) |
32 | 0 | { |
33 | 0 | list->first = elem->next; |
34 | 0 | } |
35 | 0 | if (list->last == elem) |
36 | 0 | { |
37 | 0 | list->last = elem->prev; |
38 | 0 | } |
39 | 0 | if (elem->prev) |
40 | 0 | { |
41 | 0 | elem->prev->next = elem->next; |
42 | 0 | } |
43 | 0 | if (elem->next) |
44 | 0 | { |
45 | 0 | elem->next->prev = elem->prev; |
46 | 0 | } |
47 | | m_free(elem); |
48 | 0 | return item; |
49 | 0 | } |