File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sudo / include / list.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jul 22 10:46:12 2013 UTC (11 years ago) by misho
Branches: sudo, MAIN
CVS tags: v1_8_8p0, v1_8_8, v1_8_7p0, v1_8_7, v1_8_5p1, v1_8_3p2, HEAD
1.8.7

    1: /*
    2:  * Copyright (c) 2007, 2010 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: 
   17: #ifndef _SUDO_LIST_H
   18: #define _SUDO_LIST_H
   19: 
   20: /*
   21:  * Convenience macro for declaring a list head.
   22:  */
   23: #define TQ_DECLARE(n)					\
   24: struct n##_list {					\
   25:     struct n *first;					\
   26:     struct n *last;					\
   27: };
   28: 
   29: /*
   30:  * Foreach loops: forward and reverse
   31:  */
   32: #undef tq_foreach_fwd
   33: #define tq_foreach_fwd(h, v)				\
   34:     for ((v) = (h)->first; (v) != NULL; (v) = (v)->next)
   35: 
   36: #undef tq_foreach_rev
   37: #define tq_foreach_rev(h, v)				\
   38:     for ((v) = (h)->last; (v) != NULL; (v) = (v)->prev)
   39: 
   40: /*
   41:  * Init a list head.
   42:  */
   43: #undef tq_init
   44: #define tq_init(h) do {					\
   45:     (h)->first = NULL;					\
   46:     (h)->last = NULL;					\
   47: } while (0)
   48: 
   49: /*
   50:  * Simple macros to avoid exposing first/last and prev/next.
   51:  */
   52: #undef tq_empty
   53: #define tq_empty(h)	((h)->first == NULL)
   54: 
   55: #undef tq_first
   56: #define tq_first(h)	((h)->first)
   57: 
   58: #undef tq_last
   59: #define tq_last(h)	((h)->last)
   60: 
   61: #undef list_next
   62: #define list_next(e)	((e)->next)
   63: 
   64: #undef list_prev
   65: #define list_prev(e)	((e)->prev)
   66: 
   67: /*
   68:  * Prototypes for list.c
   69:  */
   70: void *tq_pop(void *);
   71: void tq_append(void *, void *);
   72: void tq_remove(void *, void *);
   73: void list_append(void *, void *);
   74: void list2tq(void *, void *);
   75: 
   76: #endif /* _SUDO_LIST_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>