7 list_t *list_insert(list_t *next, void *data)
9 list_t *node = new0(list_t);
12 node->prev = next ? next->prev : NULL;
13 if (node->next) node->next->prev = node;
14 if (node->prev) node->prev->next = node;
18 list_t *list_append(list_t *head, void *data)
23 list_t *node = new0(list_t);
26 if (last) last->next = node;
27 return last ? head : node;
30 list_t *list_remove(list_t *head, list_t *node)
32 list_t *next = node->next;
33 list_t *prev = node->prev;
34 if (next) next->prev = prev;
35 if (prev) prev->next = next;
37 return head == node ? next : head;
40 int list_length(list_t *node)
43 for (; node; node = node->next)
48 void list_move(list_t *node, int offset)
53 int error(char *fmt, ...)
57 fprintf(stderr, "Error: ");
58 vfprintf(stderr, fmt, ap);
59 fprintf(stderr, "\n");