source: trunk/packages/xen-3.1/xen-3.1/tools/blktap/lib/list.h @ 34

Last change on this file since 34 was 34, checked in by hartmans, 18 years ago

Add xen and xen-common

File size: 1.6 KB
Line 
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
14struct 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
23static 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
33static inline void list_add(struct list_head *new, struct list_head *head)
34{
35        __list_add(new, head, head->next);
36}
37static inline void __list_del(struct list_head * prev, struct list_head * next)
38{
39        next->prev = prev;
40        prev->next = next;
41}
42static 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__ */
Note: See TracBrowser for help on using the repository browser.