Merge from vendor branch TCPDUMP:
[dragonfly.git] / sys / vfs / coda / coda_kernel.h
1 /*
2  * 
3  *             Coda: an Experimental Distributed File System
4  *                              Release 3.1
5  * 
6  *           Copyright (c) 1987-1998 Carnegie Mellon University
7  *                          All Rights Reserved
8  * 
9  * Permission  to  use, copy, modify and distribute this software and its
10  * documentation is hereby granted,  provided  that  both  the  copyright
11  * notice  and  this  permission  notice  appear  in  all  copies  of the
12  * software, derivative works or  modified  versions,  and  any  portions
13  * thereof, and that both notices appear in supporting documentation, and
14  * that credit is given to Carnegie Mellon University  in  all  documents
15  * and publicity pertaining to direct or indirect use of this code or its
16  * derivatives.
17  * 
18  * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
19  * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
20  * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
21  * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
22  * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
23  * ANY DERIVATIVE WORK.
24  * 
25  * Carnegie  Mellon  encourages  users  of  this  software  to return any
26  * improvements or extensions that  they  make,  and  to  grant  Carnegie
27  * Mellon the rights to redistribute these changes without encumbrance.
28  * 
29  *      @(#) src/sys/coda/coda_kernel.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
30  * $FreeBSD: src/sys/coda/coda_kernel.h,v 1.4 1999/08/28 00:40:53 peter Exp $
31  * $DragonFly: src/sys/vfs/coda/Attic/coda_kernel.h,v 1.2 2003/06/17 04:28:19 dillon Exp $
32  * 
33  */
34
35 /* Macros to manipulate the queue */
36 #ifndef INIT_QUEUE
37 struct queue {
38     struct queue *forw, *back;
39 };
40
41 #define INIT_QUEUE(head)                     \
42 do {                                         \
43     (head).forw = (struct queue *)&(head);   \
44     (head).back = (struct queue *)&(head);   \
45 } while (0)
46
47 #define GETNEXT(head) (head).forw
48
49 #define EMPTY(head) ((head).forw == &(head))
50
51 #define EOQ(el, head) ((struct queue *)(el) == (struct queue *)&(head))
52                    
53 #define INSQUE(el, head)                             \
54 do {                                                 \
55         (el).forw = ((head).back)->forw;             \
56         (el).back = (head).back;                     \
57         ((head).back)->forw = (struct queue *)&(el); \
58         (head).back = (struct queue *)&(el);         \
59 } while (0)
60
61 #define REMQUE(el)                         \
62 do {                                       \
63         ((el).forw)->back = (el).back;     \
64         (el).back->forw = (el).forw;       \
65 }  while (0)
66
67 #endif