git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
EWEric Wong <e@80x24.org>
Date
Jul 17, 2016, 00:25 UTC
Message-ID
<20160717002533.GA14200@whir>
In-Reply-To
<20160716210454.GA7849@starla>
Eric Wong <e@80x24.org> wrote:
Show 10 quoted lines
> Lars Schneider <larsxschneider@gmail.com> 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/FB76544F-16F7-45CA-9649-FD62EE44B0DE@gmail.com
Reported-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Eric Wong <e@80x24.org>
---
 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
Previous: Lars SchneiderNext: Eric Sunshine
Message 18 of 21 in “What's cooking in git.git (Jul 2016, #05; Wed, 13)”
  1. Junio C HamanoJul 13, 2016
  2. Stefan BellerJul 13, 2016
  3. Junio C HamanoJul 13, 2016
  4. Stefan BellerJul 13, 2016
  5. Junio C HamanoJul 13, 2016
  6. Junio C HamanoJul 13, 2016
  7. Jeff KingJul 13, 2016
  8. Duy NguyenJul 13, 2016
  9. Junio C HamanoJul 13, 2016
  10. Johannes SchindelinJul 14, 2016
  11. Johannes SchindelinJul 14, 2016
  12. Junio C HamanoJul 14, 2016
  13. Johannes SchindelinJul 14, 2016
  14. Junio C HamanoJul 14, 2016
  15. Lars SchneiderJul 16, 2016
  16. Eric WongJul 16, 2016
  17. Lars SchneiderJul 16, 2016
  18. list: avoid incompatibility with *BSD sys/queue.hEric Wong, Jul 17, 2016
  19. Eric SunshineJul 17, 2016
  20. Eric WongJul 17, 2016
  21. Lars SchneiderJul 18, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.