Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Jan 2009 12:47:44 +0100
From:      Christoph Mallon <christoph.mallon@gmx.de>
To:        Luigi Rizzo <rizzo@iet.unipi.it>
Cc:        current@freebsd.org
Subject:   Re: duplicate typedefs and system headers ?
Message-ID:  <498045E0.3050405@gmx.de>
In-Reply-To: <20090127232103.GA40501@onelab2.iet.unipi.it>
References:  <20090127132102.GA21574@onelab2.iet.unipi.it>	<497F91C3.7040502@gmx.de> <20090127232103.GA40501@onelab2.iet.unipi.it>

index | next in thread | previous in thread | raw e-mail

Luigi Rizzo schrieb:
> On Tue, Jan 27, 2009 at 11:59:15PM +0100, Christoph Mallon wrote:
>> Luigi Rizzo schrieb:
>>> In a recent commit tp sbin/ipfw, in an attempt to avoid
>>> a large set of header deependencies, i put a 'forward typedef'
>>> declaration in a common header, duplicating something that is in a
>>> system header:
>>>
>>> ipfw2.h:	typedef struct _ipfw_insn ipfw_insn;
>>>
>>> netiinet/ip_fw2.h
>>> 	typedef struct  _ipfw_insn {    /* template for instructions */
>>>        	...
>>> 	} ipfw_insn;
>> This just begs to break, if somebody decides to change the name of the 
>> underlying type of the typedef.
> 
> Fortunately this is almost impossible -- the system header is
> basically frozend and if I could change it I would remove the
> typedef in the first place.
> 
> I am more worried of compatibility with different compiler.
> 
> A workaround that seems to work is putting forward declarations
> just for "struct _ipfw_insn" and use it (instead of the typedef
> name) in the place that does not include netiinet/ip_fw2.h
> 
> Would this be better/more compliant with standards -- i.e.,
> is the following code correct ? gcc seems to have no objections.
> 
> 	struct foo;
> 	int a(struct foo *);
> 	typedef struct foo bar;
> 	int a(bar *x) { ... }

What is the problem with just including the correct header? This would 
be The Right Thing(tm). Everything else is just an ugly hack.


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?498045E0.3050405>