Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Jan 2009 11:43:13 +0000 (UTC)
From:      Luigi Rizzo <luigi@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r187819 - head/sbin/ipfw
Message-ID:  <200901281143.n0SBhDlE018737@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: luigi
Date: Wed Jan 28 11:43:12 2009
New Revision: 187819
URL: http://svn.freebsd.org/changeset/base/187819

Log:
  Avoid the use of duplicated typedefs -- see the comment for details.

Modified:
  head/sbin/ipfw/ipfw2.h

Modified: head/sbin/ipfw/ipfw2.h
==============================================================================
--- head/sbin/ipfw/ipfw2.h	Wed Jan 28 11:31:09 2009	(r187818)
+++ head/sbin/ipfw/ipfw2.h	Wed Jan 28 11:43:12 2009	(r187819)
@@ -210,12 +210,18 @@ struct in6_addr;
 void n2mask(struct in6_addr *mask, int n);
 int contigmask(uint8_t *p, int len);
 
-/* forward declarations to avoid header dependency */
-typedef struct _ipfw_insn ipfw_insn;
-typedef struct _ipfw_insn_u32 ipfw_insn_u32;
-typedef struct _ipfw_insn_ip6 ipfw_insn_ip6;
-typedef struct _ipfw_insn_icmp6 ipfw_insn_icmp6;
-
+/*
+ * Forward declarations to avoid include way too many headers.
+ * C does not allow duplicated typedefs, so we use the base struct
+ * that the typedef points to.
+ * Should the typedefs use a different type, the compiler will
+ * still detect the change when compiling the body of the
+ * functions involved, so we do not lose error checking.
+ */
+struct _ipfw_insn;
+struct _ipfw_insn_u32;
+struct _ipfw_insn_ip6;
+struct _ipfw_insn_icmp6;
 
 /*
  * The reserved set numer. This is a constant in ip_fw.h
@@ -243,15 +249,15 @@ int ipfw_delete_pipe(int pipe_or_queue, 
 
 /* ipv6.c */
 void print_unreach6_code(uint16_t code);
-void print_ip6(ipfw_insn_ip6 *cmd, char const *s);
-void print_flow6id( ipfw_insn_u32 *cmd);
-void print_icmp6types(ipfw_insn_u32 *cmd);
-void print_ext6hdr( ipfw_insn *cmd );
+void print_ip6(struct _ipfw_insn_ip6 *cmd, char const *s);
+void print_flow6id(struct _ipfw_insn_u32 *cmd);
+void print_icmp6types(struct _ipfw_insn_u32 *cmd);
+void print_ext6hdr(struct _ipfw_insn *cmd );
 
-ipfw_insn *add_srcip6(ipfw_insn *cmd, char *av);
-ipfw_insn *add_dstip6(ipfw_insn *cmd, char *av);
+struct _ipfw_insn *add_srcip6(struct _ipfw_insn *cmd, char *av);
+struct _ipfw_insn *add_dstip6(struct _ipfw_insn *cmd, char *av);
 
-void fill_flow6( ipfw_insn_u32 *cmd, char *av );
+void fill_flow6(struct _ipfw_insn_u32 *cmd, char *av );
 void fill_unreach6_code(u_short *codep, char *str);
-void fill_icmp6types(ipfw_insn_icmp6 *cmd, char *av);
-int fill_ext6hdr( ipfw_insn *cmd, char *av);
+void fill_icmp6types(struct _ipfw_insn_icmp6 *cmd, char *av);
+int fill_ext6hdr(struct _ipfw_insn *cmd, char *av);



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