ia64/xen-unstable

view tools/blktap/list.h @ 6946:e703abaf6e3d

Add behaviour to the remove methods to remove the transaction's path itself. This allows us to write Remove(path) to remove the specified path rather than having to slice the path ourselves.
author emellor@ewan
date Sun Sep 18 14:42:13 2005 +0100 (2005-09-18)
parents 3233e7ecfa9f
children 06d84bf87159
line source
1 /*
2 * list.h
3 *
4 * This is a subset of linux's list.h intended to be used in user-space.
5 *
6 */
8 #ifndef __LIST_H__
9 #define __LIST_H__
11 #define LIST_POISON1 ((void *) 0x00100100)
12 #define LIST_POISON2 ((void *) 0x00200200)
14 struct list_head {
15 struct list_head *next, *prev;
16 };
18 #define LIST_HEAD_INIT(name) { &(name), &(name) }
20 #define LIST_HEAD(name) \
21 struct list_head name = LIST_HEAD_INIT(name)
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 }
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))
55 #endif /* __LIST_H__ */