root/source4/heimdal/lib/gssapi/mech/mechqueue.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*      $NetBSD: queue.h,v 1.39 2004/04/18 14:25:34 lukem Exp $ */
   2 
   3 /*
   4  * Copyright (c) 1991, 1993
   5  *      The Regents of the University of California.  All rights reserved.
   6  *
   7  * Redistribution and use in source and binary forms, with or without
   8  * modification, are permitted provided that the following conditions
   9  * are met:
  10  * 1. Redistributions of source code must retain the above copyright
  11  *    notice, this list of conditions and the following disclaimer.
  12  * 2. Redistributions in binary form must reproduce the above copyright
  13  *    notice, this list of conditions and the following disclaimer in the
  14  *    documentation and/or other materials provided with the distribution.
  15  * 3. Neither the name of the University nor the names of its contributors
  16  *    may be used to endorse or promote products derived from this software
  17  *    without specific prior written permission.
  18  *
  19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  29  * SUCH DAMAGE.
  30  *
  31  *      @(#)queue.h     8.5 (Berkeley) 8/20/94
  32  */
  33 
  34 #ifndef _MECHQUEUE_H_
  35 #define _MECHQUEUE_H_
  36 
  37 #ifndef SLIST_HEAD
  38 
  39 /*
  40  * Singly-linked List definitions.
  41  */
  42 #define SLIST_HEAD(name, type)                                          \
  43 struct name {                                                           \
  44         struct type *slh_first; /* first element */                     \
  45 }
  46 
  47 #define SLIST_HEAD_INITIALIZER(head)                                    \
  48         { NULL }
  49 
  50 #define SLIST_ENTRY(type)                                               \
  51 struct {                                                                \
  52         struct type *sle_next;  /* next element */                      \
  53 }
  54 
  55 /*
  56  * Singly-linked List functions.
  57  */
  58 #define SLIST_INIT(head) do {                                           \
  59         (head)->slh_first = NULL;                                       \
  60 } while (/*CONSTCOND*/0)
  61 
  62 #define SLIST_INSERT_AFTER(slistelm, elm, field) do {                   \
  63         (elm)->field.sle_next = (slistelm)->field.sle_next;             \
  64         (slistelm)->field.sle_next = (elm);                             \
  65 } while (/*CONSTCOND*/0)
  66 
  67 #define SLIST_INSERT_HEAD(head, elm, field) do {                        \
  68         (elm)->field.sle_next = (head)->slh_first;                      \
  69         (head)->slh_first = (elm);                                      \
  70 } while (/*CONSTCOND*/0)
  71 
  72 #define SLIST_REMOVE_HEAD(head, field) do {                             \
  73         (head)->slh_first = (head)->slh_first->field.sle_next;          \
  74 } while (/*CONSTCOND*/0)
  75 
  76 #define SLIST_REMOVE(head, elm, type, field) do {                       \
  77         if ((head)->slh_first == (elm)) {                               \
  78                 SLIST_REMOVE_HEAD((head), field);                       \
  79         }                                                               \
  80         else {                                                          \
  81                 struct type *curelm = (head)->slh_first;                \
  82                 while(curelm->field.sle_next != (elm))                  \
  83                         curelm = curelm->field.sle_next;                \
  84                 curelm->field.sle_next =                                \
  85                     curelm->field.sle_next->field.sle_next;             \
  86         }                                                               \
  87 } while (/*CONSTCOND*/0)
  88 
  89 #define SLIST_FOREACH(var, head, field)                                 \
  90         for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
  91 
  92 /*
  93  * Singly-linked List access methods.
  94  */
  95 #define SLIST_EMPTY(head)       ((head)->slh_first == NULL)
  96 #define SLIST_FIRST(head)       ((head)->slh_first)
  97 #define SLIST_NEXT(elm, field)  ((elm)->field.sle_next)
  98 
  99 #endif /* SLIST_HEAD */
 100 
 101 #endif  /* !_MECHQUEUE_H_ */

/* [<][>][^][v][top][bottom][index][help] */