atom feed9 messages in org.freebsd.freebsd-currentRe: #include <struct.h> in <sys/queue.h>
FromSent OnAttachments
Poul-Henning KampOct 2, 2000 3:05 am 
Jeremy LeaOct 2, 2000 3:14 am 
Poul-Henning KampOct 2, 2000 3:20 am 
Jordan HubbardOct 2, 2000 10:10 am 
Peter van DijkOct 2, 2000 10:52 am 
Siobhan Patricia LynchOct 2, 2000 6:41 pm 
Bruce EvansOct 2, 2000 7:45 pm 
Jeffrey HsuOct 3, 2000 1:07 am 
Bruce EvansOct 5, 2000 4:03 am 
Subject:Re: #include <struct.h> in <sys/queue.h>
From:Bruce Evans (bd@zeta.org.au)
Date:Oct 2, 2000 7:45:37 pm
List:org.freebsd.freebsd-current

On Mon, 2 Oct 2000, Poul-Henning Kamp wrote:

Trying to compile the ircII port, it crashes with:

===> Building for ircii-4.4X cc -I. -I/usr/ports/irc/ircII/work/ircii-4.4X/include -O -pipe -DHAVE_CONFIG_H
-c /usr/ports/irc/ircII/work/ircii-4.4X/source/alias.c In file included from /usr/include/sys/queue.h:40, from /usr/include/netinet6/in6.h:76, from /usr/include/netinet/in.h:475, from /usr/ports/irc/ircII/work/ircii-4.4X/include/irc.h:79, from /usr/ports/irc/ircII/work/ircii-4.4X/source/alias.c:35: /usr/ports/irc/ircII/work/ircii-4.4X/include/struct.h:51: syntax error before
`_'

This is because there is a file called "struct.h" in the ircII distribution.

The addition of #include <struct.h> to <sys/queue.h> looks a bit unsettling to me: A sys/* file shouldn't reference a /usr/include file I think ?

I corresponded with the author of this bug soon after it was committed, but didn't follow up.

Is the correct thing not to mv <struct.h> to <sys/struct.h>, create a <struct.h> which just pulls in <sys/struct.h> and have <sys/queue.h> #include <sys/struct.h> ?

Of course not. Just expand the one macro that is used (strbase()) in the one place that it is used in <sys/queue.h>.

I think <struct.h> should have been removed when offsetof() became standard. It was only used in one place in /usr/src (lastcomm). Only the fldsiz() macro is used there. <struct.h> defines 2 other macros: fldoff() and strbase(). fldoff() is a bad version of offsetof() (one that takes a struct tag instead of a type, so it can't be used with typedefed structs). strbase() is now used in <sys/queue.h>. It is easy to implement directly using offsetof(). Unfortunately, if it is implemented using offsetof(), then <sys/queue.h> will depend on <stddef.h>.

Bruce

To Unsubscribe: send mail to majo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message