patch-2.1.92 linux/include/linux/lists.h

Next file: linux/include/linux/major.h
Previous file: linux/include/linux/isdnif.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.91/linux/include/linux/lists.h linux/include/linux/lists.h
@@ -13,7 +13,7 @@
 
 #define DLIST_INIT(listnam)	                                \
 	(listnam).dl_prev = &(listnam);				\
-	(listnam).dl_last = &(listnam);
+	(listnam).dl_next = &(listnam);
 
 #define DLIST_NEXT(listnam)	listnam.dl_next
 #define DLIST_PREV(listnam)	listnam.dl_prev
@@ -38,3 +38,25 @@
 	node->listnam.dl_next->listnam.dl_prev =		\
 		node->listnam.dl_prev;				\
 	} while (0)
+
+/*
+ * queue-style operations, which have a head and tail
+ */
+
+#define QUEUE_INIT(head, listnam, ptype)				\
+	(head)->listnam.dl_prev = (head)->listnam.dl_next = (ptype)(head);
+
+#define QUEUE_FIRST(head, listnam) (head)->DLIST_NEXT(listnam)
+#define QUEUE_LAST(head, listnam) (head)->DLIST_PREV(listnam)
+#define QUEUE_EMPTY(head, listnam) \
+	((QUEUE_FIRST(head, listnam) == QUEUE_LAST(head, listnam)) && \
+	 ((u_long)QUEUE_FIRST(head, listnam) == (u_long)head)) 
+
+#define QUEUE_ENTER(head, new, listnam, ptype) do {		\
+	(new)->listnam.dl_prev = (ptype)(head);			\
+	(new)->listnam.dl_next = (head)->listnam.dl_next;	\
+	(head)->listnam.dl_next->listnam.dl_prev = (new);	\
+	(head)->listnam.dl_next = (new);			\
+	} while (0)
+
+#define QUEUE_REMOVE(head, node, listnam) DLIST_DELETE(node, listnam)

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov