Subject: [PATCH] list: avoid incompatibility with *BSD sys/queue.h

From: Eric Wong <[email-masked]>
Date: Sun, 17 Jul 2016 00:25:34 +0000

Eric Wong <[email-masked]> wrote:
> Lars Schneider <[email-masked]> wrote:
> > It looks like as if this topic breaks the OS X build because 
> > it defines LIST_HEAD. LIST_HEAD is already defined in 
> > /usr/include/sys/queue.h. 
> 
> Oops, I suppose GIT_LIST_HEAD is an acceptable name?
> (looks a bit like a refname, though...).
> 
> Or maybe CDS_LIST_HEAD (since I originally took it from the cds
> namespace under urcu)

Naming things is hard; I think it's better to just undef an
existing LIST_HEAD, instead, since it's unlikely we'd ever use
sys/queue.h from *BSD.  (sys/queue.h is branchier, and IMHO
sys/queue.h macros are uglier than list_entry (container_of))

> I also wonder where we use sys/queue.h, since I use
> LIST_HEAD from ccan/list/list.h in a different project
> without conflicts...

Still wondering... Checking sys/mman.h in an old FreeBSD source
tree I had lying around reveals "#include <sys/queue.h>" is
guarded by "#if defined(_KERNEL)", so it mman.h wouldn't pull
it in for userspace builds...

-----8<------
Subject: [PATCH] list: avoid incompatibility with *BSD sys/queue.h

Somehow, the OS X build pulls in sys/queue.h and causes
conflicts with the LIST_HEAD macro, here.

ref: http://mid.gmane.org/[email-masked]

Reported-by: Lars Schneider <[email-masked]>
Signed-off-by: Eric Wong <[email-masked]>
---
 list.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/list.h b/list.h
index f65edce..a226a87 100644
--- a/list.h
+++ b/list.h
@@ -36,6 +36,8 @@ struct list_head {
 	struct list_head *next, *prev;
 };
 
+/* avoid conflicts with BSD-only sys/queue.h */
+#undef LIST_HEAD
 /* Define a variable with the head and tail of the list. */
 #define LIST_HEAD(name) \
 	struct list_head name = { &(name), &(name) }
-- 
EW