Module Name:    src
Committed By:   mschuett
Date:           Mon Apr 20 09:56:08 UTC 2009

Modified Files:
        src/share/man/man3: queue.3
        src/sys/dev/ieee1394: fw_port.h
        src/sys/sys: queue.h
        src/usr.sbin/syslogd: syslogd.h

Log Message:
Add queue macros SLIST_FOREACH_SAFE, STAILQ_FOREACH_SAFE, STAILQ_LAST,
SIMPLEQ_CONCAT, and SIMPLEQ_LAST.

Remove seperate definitions outside of queue.h.


To generate a diff of this commit:
cvs rdiff -u -r1.41 -r1.42 src/share/man/man3/queue.3
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/ieee1394/fw_port.h
cvs rdiff -u -r1.51 -r1.52 src/sys/sys/queue.h
cvs rdiff -u -r1.2 -r1.3 src/usr.sbin/syslogd/syslogd.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/man/man3/queue.3
diff -u src/share/man/man3/queue.3:1.41 src/share/man/man3/queue.3:1.42
--- src/share/man/man3/queue.3:1.41	Wed Mar 11 08:29:56 2009
+++ src/share/man/man3/queue.3	Mon Apr 20 09:56:07 2009
@@ -1,4 +1,4 @@
-.\"	$NetBSD: queue.3,v 1.41 2009/03/11 08:29:56 wiz Exp $
+.\"	$NetBSD: queue.3,v 1.42 2009/04/20 09:56:07 mschuett Exp $
 .\"
 .\" Copyright (c) 2000, 2002 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -66,6 +66,7 @@
 .Nm SLIST_REMOVE_HEAD ,
 .Nm SLIST_REMOVE ,
 .Nm SLIST_FOREACH ,
+.Nm SLIST_FOREACH_SAFE ,
 .Nm SLIST_EMPTY ,
 .Nm SLIST_FIRST ,
 .Nm SLIST_NEXT ,
@@ -83,6 +84,8 @@
 .Nm SIMPLEQ_EMPTY ,
 .Nm SIMPLEQ_FIRST ,
 .Nm SIMPLEQ_NEXT ,
+.Nm SIMPLEQ_LAST ,
+.Nm SIMPLEQ_CONCAT ,
 .Nm STAILQ_HEAD ,
 .Nm STAILQ_HEAD_INITIALIZER ,
 .Nm STAILQ_ENTRY ,
@@ -93,9 +96,11 @@
 .Nm STAILQ_REMOVE_HEAD ,
 .Nm STAILQ_REMOVE ,
 .Nm STAILQ_FOREACH ,
+.Nm STAILQ_FOREACH_SAFE ,
 .Nm STAILQ_EMPTY ,
 .Nm STAILQ_FIRST ,
 .Nm STAILQ_NEXT ,
+.Nm STAILQ_LAST ,
 .Nm STAILQ_CONCAT ,
 .Nm LIST_HEAD ,
 .Nm LIST_HEAD_INITIALIZER ,
@@ -159,6 +164,7 @@
 .Fn SLIST_REMOVE_HEAD "SLIST_HEAD *head" "SLIST_ENTRY NAME"
 .Fn SLIST_REMOVE "SLIST_HEAD *head" "TYPE *elm" "TYPE" "SLIST_ENTRY NAME"
 .Fn SLIST_FOREACH "TYPE *var" "SLIST_HEAD *head" "SLIST_ENTRY NAME"
+.Fn SLIST_FOREACH_SAFE "TYPE *var" "SLIST_HEAD *head" "SLIST_ENTRY NAME" "TYPE *tmp"
 .Ft int
 .Fn SLIST_EMPTY "SLIST_HEAD *head"
 .Ft TYPE *
@@ -183,6 +189,9 @@
 .Fn SIMPLEQ_FIRST "SIMPLEQ_HEAD *head"
 .Ft TYPE *
 .Fn SIMPLEQ_NEXT "TYPE *elm" "SIMPLEQ_ENTRY NAME"
+.Ft TYPE *
+.Fn SIMPLEQ_LAST "SIMPLEQ_HEAD *head" "TYPE *elm" "SIMPLEQ_ENTRY NAME"
+.Fn SIMPLEQ_CONCAT "SIMPLEQ_HEAD *head1" "SIMPLEQ_HEAD *head2"
 .sp
 .Fn STAILQ_HEAD "HEADNAME" "TYPE"
 .Fn STAILQ_HEAD_INITIALIZER "head"
@@ -194,12 +203,15 @@
 .Fn STAILQ_REMOVE_HEAD "STAILQ_HEAD *head" "STAILQ_ENTRY NAME"
 .Fn STAILQ_REMOVE "STAILQ_HEAD *head" "TYPE *elm" "TYPE" "STAILQ_ENTRY NAME"
 .Fn STAILQ_FOREACH "TYPE *var" "STAILQ_HEAD *head" "STAILQ_ENTRY NAME"
+.Fn STAILQ_FOREACH_SAFE "TYPE *var" "STAILQ_HEAD *head" "STAILQ_ENTRY NAME" "TYPE *tmp"
 .Ft int
 .Fn STAILQ_EMPTY "STAILQ_HEAD *head"
 .Ft TYPE *
 .Fn STAILQ_FIRST "STAILQ_HEAD *head"
 .Ft TYPE *
 .Fn STAILQ_NEXT "TYPE *elm" "STAILQ_ENTRY NAME"
+.Ft TYPE *
+.Fn STAILQ_LAST "STAILQ_HEAD *head" "TYPE *elm" "STAILQ_ENTRY NAME"
 .Fn STAILQ_CONCAT "STAILQ_HEAD *head1" "STAILQ_HEAD *head2"
 .sp
 .Fn LIST_HEAD "HEADNAME" "TYPE"
@@ -414,14 +426,14 @@
 _INSERT_BEFORE:-:+:-:-:+:+
 _INSERT_HEAD:+:+:+:+:+:+
 _INSERT_TAIL:-:-:+:+:+:+
-_LAST:-:-:-:-:+:+
+_LAST:-:-:-:+:+:+
 _LOOP_NEXT:-:-:-:-:-:+
 _LOOP_PREV:-:-:-:-:-:+
 _NEXT:+:+:+:+:+:+
 _PREV:-:-:-:-:+:+
 _REMOVE:+:+:+:+:+:+
 _REMOVE_HEAD:+:-:+:+:-:-
-_CONCAT:-:-:-:+:+:-
+_CONCAT:-:-:+:+:+:-
 .TE
 .Sh SINGLY-LINKED LISTS
 A singly-linked list is headed by a structure defined by the
@@ -482,6 +494,12 @@
 turn to
 .Fa var .
 .Pp
+The SAFE versions uses
+.Fa tmp
+to hold the next element, so
+.Fa var
+may be freed or removed from the list.
+.Pp
 The macro
 .Nm SLIST_INIT
 initializes the list referenced by
@@ -672,6 +690,20 @@
 returns the element after the element
 .Fa elm .
 .Pp
+The macro
+.Nm SIMPLEQ_LAST
+returns the last item on the tail queue.
+If the tail queue is empty the return value is
+.Dv NULL .
+.Pp
+The macro
+.Nm SIMPLEQ_CONCAT
+concatenates the tail queue headed by
+.Fa head2
+onto the end of the one headed by
+.Fa head1
+removing all entries from the former.
+.Pp
 The macros prefixed with
 .Dq Nm STAILQ_
 .Nm ( STAILQ_HEAD ,
@@ -684,10 +716,13 @@
 .Nm STAILQ_REMOVE_HEAD ,
 .Nm STAILQ_REMOVE ,
 .Nm STAILQ_FOREACH ,
+.Nm STAILQ_FOREACH_SAFE ,
 .Nm STAILQ_EMPTY ,
 .Nm STAILQ_FIRST ,
+.Nm STAILQ_NEXT ,
+.Nm STAILQ_LAST ,
 and
-.Nm STAILQ_NEXT )
+.Nm STAILQ_CONCAT )
 are functionally identical to these simple queue functions,
 and are provided for compatibility with
 .Fx .

Index: src/sys/dev/ieee1394/fw_port.h
diff -u src/sys/dev/ieee1394/fw_port.h:1.31 src/sys/dev/ieee1394/fw_port.h:1.32
--- src/sys/dev/ieee1394/fw_port.h:1.31	Wed Mar 18 16:00:18 2009
+++ src/sys/dev/ieee1394/fw_port.h	Mon Apr 20 09:56:07 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: fw_port.h,v 1.31 2009/03/18 16:00:18 cegger Exp $	*/
+/*	$NetBSD: fw_port.h,v 1.32 2009/04/20 09:56:07 mschuett Exp $	*/
 /*
  * Copyright (c) 2004 KIYOHARA Takashi
  * All rights reserved.
@@ -1313,19 +1313,6 @@
 #define rounddown(x, y) ((x) / (y) * (y))
 #endif
 
-
-/*
- * additional queue macros for NetBSD
- */
-#define STAILQ_LAST(head, type, field) \
-	(STAILQ_EMPTY((head)) ? (struct type *)NULL : \
-	(struct type *) \
-	((char *)(head)->stqh_last - (size_t)&((struct type *)0)->field))
-#define STAILQ_FOREACH_SAFE(var, head, field, _var)	\
-				(void)(_var);		\
-				STAILQ_FOREACH(var, head, field)
-
-
 /*
  * additional mbuf macros for NetBSD
  */

Index: src/sys/sys/queue.h
diff -u src/sys/sys/queue.h:1.51 src/sys/sys/queue.h:1.52
--- src/sys/sys/queue.h:1.51	Wed Mar 11 06:51:53 2009
+++ src/sys/sys/queue.h	Mon Apr 20 09:56:08 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: queue.h,v 1.51 2009/03/11 06:51:53 mrg Exp $	*/
+/*	$NetBSD: queue.h,v 1.52 2009/04/20 09:56:08 mschuett Exp $	*/
 
 /*
  * Copyright (c) 1991, 1993
@@ -232,6 +232,11 @@
 #define	SLIST_FOREACH(var, head, field)					\
 	for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
 
+#define	SLIST_FOREACH_SAFE(var, head, field, tvar)			\
+	for ((var) = SLIST_FIRST((head));				\
+	    (var) && ((tvar) = SLIST_NEXT((var), field), 1);		\
+	    (var) = (tvar))
+
 /*
  * Singly-linked List access methods.
  */
@@ -306,6 +311,11 @@
 		(var);							\
 		(var) = ((var)->field.stqe_next))
 
+#define	STAILQ_FOREACH_SAFE(var, head, field, tvar)			\
+	for ((var) = STAILQ_FIRST((head));				\
+	    (var) && ((tvar) = STAILQ_NEXT((var), field), 1);		\
+	    (var) = (tvar))
+
 #define	STAILQ_CONCAT(head1, head2) do {				\
 	if (!STAILQ_EMPTY((head2))) {					\
 		*(head1)->stqh_last = (head2)->stqh_first;		\
@@ -314,6 +324,12 @@
 	}								\
 } while (/*CONSTCOND*/0)
 
+#define	STAILQ_LAST(head, type, field)					\
+	(STAILQ_EMPTY((head)) ?						\
+		NULL :							\
+	        ((struct type *)(void *)				\
+		((char *)((head)->stqh_last) - offsetof(struct type, field))))
+
 /*
  * Singly-linked Tail queue access methods.
  */
@@ -393,6 +409,20 @@
 		(var) && ((next = ((var)->field.sqe_next)), 1);		\
 		(var) = (next))
 
+#define	SIMPLEQ_CONCAT(head1, head2) do {				\
+	if (!SIMPLEQ_EMPTY((head2))) {					\
+		*(head1)->sqh_last = (head2)->sqh_first;		\
+		(head1)->sqh_last = (head2)->sqh_last;		\
+		SIMPLEQ_INIT((head2));					\
+	}								\
+} while (/*CONSTCOND*/0)
+
+#define	SIMPLEQ_LAST(head, type, field)					\
+	(SIMPLEQ_EMPTY((head)) ?						\
+		NULL :							\
+	        ((struct type *)(void *)				\
+		((char *)((head)->sqh_last) - offsetof(struct type, field))))
+
 /*
  * Simple queue access methods.
  */

Index: src/usr.sbin/syslogd/syslogd.h
diff -u src/usr.sbin/syslogd/syslogd.h:1.2 src/usr.sbin/syslogd/syslogd.h:1.3
--- src/usr.sbin/syslogd/syslogd.h:1.2	Fri Nov  7 07:36:38 2008
+++ src/usr.sbin/syslogd/syslogd.h	Mon Apr 20 09:56:08 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: syslogd.h,v 1.2 2008/11/07 07:36:38 minskim Exp $	*/
+/*	$NetBSD: syslogd.h,v 1.3 2009/04/20 09:56:08 mschuett Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -97,46 +97,6 @@
 #include <sys/stdint.h>
 #include <sys/resource.h>
 
-/* additional queue macros copied from FreeBSD	*/
-#ifndef SLIST_FOREACH_SAFE
-#define SLIST_FOREACH_SAFE(var, head, field, tvar)	    \
-    for ((var) = SLIST_FIRST((head));		    \
-	(var) && ((tvar) = SLIST_NEXT((var), field), 1);	\
-	(var) = (tvar))
-#endif /* !SLIST_FOREACH_SAFE */
-#ifndef STAILQ_FOREACH_SAFE
-#define STAILQ_FOREACH_SAFE(var, head, field, tvar)	    \
-    for ((var) = STAILQ_FIRST((head));		    \
-	(var) && ((tvar) = STAILQ_NEXT((var), field), 1);	\
-	(var) = (tvar))
-#endif /* !STAILQ_FOREACH_SAFE */
-#ifndef STAILQ_LAST
-#define STAILQ_LAST(head, type, field)			\
-    (STAILQ_EMPTY((head)) ?			\
-	NULL :				\
-	    ((struct type *)			\
-	((char *)((head)->stqh_last) - offsetof(struct type, field))))
-#endif /* !STAILQ_LAST */
-#ifndef STAILQ_CONCAT
-#define STAILQ_CONCAT(head1, head2) do {	\
-  if (!STAILQ_EMPTY((head2))) {		\
-    *(head1)->stqh_last = (head2)->stqh_first;	  \
-    (head1)->stqh_last = (head2)->stqh_last;	\
-    STAILQ_INIT((head2));	  \
-  }		  \
-} while (0)
-#endif /* !STAILQ_CONCAT */
-#ifndef TAILQ_CONCAT
-#define TAILQ_CONCAT(head1, head2, field) do {		    \
-    if (!TAILQ_EMPTY(head2)) {			\
-	*(head1)->tqh_last = (head2)->tqh_first;	\
-	(head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
-	(head1)->tqh_last = (head2)->tqh_last;		\
-	TAILQ_INIT((head2));			\
-    }				    \
-} while (0)
-#endif /* !TAILQ_CONCAT */
-
 #include "pathnames.h"
 #include <sys/syslog.h>
 

Reply via email to