]> git.gag.com Git - debian/sudo/blob - list.h
oops
[debian/sudo] / list.h
1 /*
2  * Copyright (c) 2007 Todd C. Miller <Todd.Miller@courtesan.com>
3  *
4  * Permission to use, copy, modify, and distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  *
16  * $Sudo: list.h,v 1.3 2007/09/11 19:42:48 millert Exp $
17  */
18
19 #ifndef _SUDO_LIST_H
20 #define _SUDO_LIST_H
21
22 /*
23  * Convenience macro for declaring a list head.
24  */
25 #ifdef __STDC__
26 #define TQ_DECLARE(n)                                   \
27 struct n##_list {                                       \
28     struct n *first;                                    \
29     struct n *last;                                     \
30 };
31 #else
32 #define TQ_DECLARE(n)                                   \
33 struct n/**/_list {                                     \
34     struct n *first;                                    \
35     struct n *last;                                     \
36 };
37 #endif
38
39 /*
40  * Foreach loops: forward and reverse
41  */
42 #undef tq_foreach_fwd
43 #define tq_foreach_fwd(h, v)                            \
44     for ((v) = (h)->first; (v) != NULL; (v) = (v)->next)
45
46 #undef tq_foreach_rev
47 #define tq_foreach_rev(h, v)                            \
48     for ((v) = (h)->last; (v) != NULL; (v) = (v)->prev)
49
50 /*
51  * Init a list head.
52  */
53 #undef tq_init
54 #define tq_init(h) do {                                 \
55     (h)->first = NULL;                                  \
56     (h)->last = NULL;                                   \
57 } while (0)
58
59 /*
60  * Simple macros to avoid exposing first/last and prev/next.
61  */
62 #undef tq_empty
63 #define tq_empty(h)     ((h)->first == NULL)
64
65 #undef tq_first
66 #define tq_first(h)     ((h)->first)
67
68 #undef tq_last
69 #define tq_last(h)      ((h)->last)
70
71 #undef list_next
72 #define list_next(e)    ((e)->next)
73
74 #undef list_prev
75 #define list_prev(e)    ((e)->prev)
76
77 /*
78  * Prototypes for list.c
79  */
80 void *tq_pop            __P((void *));
81 void tq_append          __P((void *, void *));
82 void list_append        __P((void *, void *));
83 void list2tq            __P((void *, void *));
84
85 #endif /* _SUDO_LIST_H */