Date: Tue, 27 Jan 2009 14:21:02 +0100 From: Luigi Rizzo <rizzo@iet.unipi.it> To: current@freebsd.org Subject: duplicate typedefs and system headers ? Message-ID: <20090127132102.GA21574@onelab2.iet.unipi.it>
next in thread | raw e-mail | index | archive | help
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;
Sources including both ipfw2.h and /usr/include/netinet/ip_fw2.h
However if the duplication occurs in two non-system files, the
compiler produces an error for a duplicate typedef.
Now i wonder, is there any compiler option to turn off the check
for duplicate typedefs also for non-system headers ?
BTW the behaviour with duplicate typedefs is curious,
you can try this for yourself with a simple example
involving e.g. /usr/include/sha.h : make a copy of the file
in userspace, and then you can try the following (SHA_CTX
is typedef'ed in sha.h
--- ok ---
typedef struct SHAstate_st SHA_CTX;
#include <sha.h>
--- ok ---
#include <sha.h>
typedef struct SHAstate_st SHA_CTX;
--- error ---
#include "sha.h"
typedef struct SHAstate_st SHA_CTX;
--- error ---
typedef struct SHAstate_st SHA_CTX;
#include "sha.h"
--- ok (this is surprising to me) --
typedef struct SHAstate_st SHA_CTX;
#include <sha.h>
typedef struct SHAstate_st SHA_CTX;
As you note, it looks like a typedef in a system header
removes the error message for duplicates both before and after.
cheers
luigi
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090127132102.GA21574>
