| 1 | /* |
|---|
| 2 | * list.h |
|---|
| 3 | * |
|---|
| 4 | * This is a subset of linux's list.h intended to be used in user-space. |
|---|
| 5 | * |
|---|
| 6 | */ |
|---|
| 7 | |
|---|
| 8 | #ifndef __LIST_H__ |
|---|
| 9 | #define __LIST_H__ |
|---|
| 10 | |
|---|
| 11 | #define LIST_POISON1 ((void *) 0x00100100) |
|---|
| 12 | #define LIST_POISON2 ((void *) 0x00200200) |
|---|
| 13 | |
|---|
| 14 | struct list_head { |
|---|
| 15 | struct list_head *next, *prev; |
|---|
| 16 | }; |
|---|
| 17 | |
|---|
| 18 | #define LIST_HEAD_INIT(name) { &(name), &(name) } |
|---|
| 19 | |
|---|
| 20 | #define LIST_HEAD(name) \ |
|---|
| 21 | struct list_head name = LIST_HEAD_INIT(name) |
|---|
| 22 | |
|---|
| 23 | static inline void __list_add(struct list_head *new, |
|---|
| 24 | struct list_head *prev, |
|---|
| 25 | struct list_head *next) |
|---|
| 26 | { |
|---|
| 27 | next->prev = new; |
|---|
| 28 | new->next = next; |
|---|
| 29 | new->prev = prev; |
|---|
| 30 | prev->next = new; |
|---|
| 31 | } |
|---|
| 32 | |
|---|
| 33 | static inline void list_add(struct list_head *new, struct list_head *head) |
|---|
| 34 | { |
|---|
| 35 | __list_add(new, head, head->next); |
|---|
| 36 | } |
|---|
| 37 | static inline void __list_del(struct list_head * prev, struct list_head * next) |
|---|
| 38 | { |
|---|
| 39 | next->prev = prev; |
|---|
| 40 | prev->next = next; |
|---|
| 41 | } |
|---|
| 42 | static inline void list_del(struct list_head *entry) |
|---|
| 43 | { |
|---|
| 44 | __list_del(entry->prev, entry->next); |
|---|
| 45 | entry->next = LIST_POISON1; |
|---|
| 46 | entry->prev = LIST_POISON2; |
|---|
| 47 | } |
|---|
| 48 | #define list_entry(ptr, type, member) \ |
|---|
| 49 | ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) |
|---|
| 50 | #define list_for_each_entry(pos, head, member) \ |
|---|
| 51 | for (pos = list_entry((head)->next, typeof(*pos), member); \ |
|---|
| 52 | &pos->member != (head); \ |
|---|
| 53 | pos = list_entry(pos->member.next, typeof(*pos), member)) |
|---|
| 54 | |
|---|
| 55 | #endif /* __LIST_H__ */ |
|---|