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>

next in thread | previous in thread | raw e-mail | index | archive | help
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.



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