84 #define LIST_CONCAT(s1, s2) s1##s2
86 #define LIST_STRUCT(name) \
87 void *LIST_CONCAT(name, _list); \
90 #define LIST_STRUCT_INIT(struct_ptr, name) { \
91 (struct_ptr)->name = &((struct_ptr)->LIST_CONCAT(name,_list)); \
92 (struct_ptr)->LIST_CONCAT(name,_list) = NULL; \
102 LL_DELETE(*(
struct list **)list, (
struct list *)item);
108 LL_APPEND(*(
struct list **)list, (
struct list *)item);
113 LL_PREPEND(*(
struct list **)list, (
struct list *)item);
128 if(previtem == NULL) {
131 ((
struct list *)newitem)->next = ((
struct list *)previtem)->next;
132 ((
struct list *)previtem)->next = newitem;
139 return item == NULL? NULL: ((
struct list *)item)->next;
static void * list_pop(list_t list)
static void list_insert(list_t list, void *previtem, void *newitem)
#define LL_PREPEND(head, add)
static void list_add(list_t list, void *item)
static void * list_item_next(void *item)
#define LL_APPEND(head, add)
static void * list_head(list_t list)
static void list_remove(list_t list, void *item)
#define LL_DELETE(head, del)
static void list_push(list_t list, void *item)