summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbluhm <bluhm@openbsd.org>2013-03-28 15:05:32 +0000
committerbluhm <bluhm@openbsd.org>2013-03-28 15:05:32 +0000
commite2a08a5cfbc65f54e74a6d16979ee82187b59fb0 (patch)
tree6de894f817e74df4cb1c3d3b2839a8f96341c635
parentReplace some casts to struct in_ifaddr pointer by ifatoia() or NULL. (diff)
downloadwireguard-openbsd-e2a08a5cfbc65f54e74a6d16979ee82187b59fb0.tar.xz
wireguard-openbsd-e2a08a5cfbc65f54e74a6d16979ee82187b59fb0.zip
Convert the satosin, sintosa, ifatoia, satosin6, sin6tosa, ifatoia6
defines into static inline functions. This allows the compiler to check the source type before casting. liked by many; OK mpi@ haesbaert@
-rw-r--r--sys/netinet/in.h33
-rw-r--r--sys/netinet6/in6.h33
2 files changed, 58 insertions, 8 deletions
diff --git a/sys/netinet/in.h b/sys/netinet/in.h
index 1a9053768a0..175129f9829 100644
--- a/sys/netinet/in.h
+++ b/sys/netinet/in.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: in.h,v 1.95 2012/10/21 13:06:03 benno Exp $ */
+/* $OpenBSD: in.h,v 1.96 2013/03/28 15:05:32 bluhm Exp $ */
/* $NetBSD: in.h,v 1.20 1996/02/13 23:41:47 christos Exp $ */
/*
@@ -844,8 +844,33 @@ void in_proto_cksum_out(struct mbuf *, struct ifnet *);
#define in_hosteq(s,t) ((s).s_addr == (t).s_addr)
#define in_nullhost(x) ((x).s_addr == INADDR_ANY)
-#define satosin(sa) ((struct sockaddr_in *)(sa))
-#define sintosa(sin) ((struct sockaddr *)(sin))
-#define ifatoia(ifa) ((struct in_ifaddr *)(ifa))
+struct sockaddr;
+struct sockaddr_in;
+struct ifaddr;
+struct in_ifaddr;
+
+/*
+ * Convert between address family specific and general structs.
+ * Inline functions check the source type and are stricter than
+ * casts or defines.
+ */
+
+static __inline struct sockaddr_in *
+satosin(struct sockaddr *sa)
+{
+ return ((struct sockaddr_in *)(sa));
+}
+
+static __inline struct sockaddr *
+sintosa(struct sockaddr_in *sin)
+{
+ return ((struct sockaddr *)(sin));
+}
+
+static __inline struct in_ifaddr *
+ifatoia(struct ifaddr *ifa)
+{
+ return ((struct in_ifaddr *)(ifa));
+}
#endif /* _KERNEL */
#endif /* _NETINET_IN_H_ */
diff --git a/sys/netinet6/in6.h b/sys/netinet6/in6.h
index 52d8ca97042..cc377ebd62a 100644
--- a/sys/netinet6/in6.h
+++ b/sys/netinet6/in6.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: in6.h,v 1.63 2013/03/14 14:28:38 mpi Exp $ */
+/* $OpenBSD: in6.h,v 1.64 2013/03/28 15:05:32 bluhm Exp $ */
/* $KAME: in6.h,v 1.83 2001/03/29 02:55:07 jinmei Exp $ */
/*
@@ -764,9 +764,34 @@ extern void in6_if_up(struct ifnet *);
void in6_get_rand_ifid(struct ifnet *, struct in6_addr *);
int in6_mask2len(struct in6_addr *, u_char *);
-#define satosin6(sa) ((struct sockaddr_in6 *)(sa))
-#define sin6tosa(sin6) ((struct sockaddr *)(sin6))
-#define ifatoia6(ifa) ((struct in6_ifaddr *)(ifa))
+struct sockaddr;
+struct sockaddr_in6;
+struct ifaddr;
+struct in6_ifaddr;
+
+/*
+ * Convert between address family specific and general structs.
+ * Inline functions check the source type and are stricter than
+ * casts or defines.
+ */
+
+static __inline struct sockaddr_in6 *
+satosin6(struct sockaddr *sa)
+{
+ return ((struct sockaddr_in6 *)(sa));
+}
+
+static __inline struct sockaddr *
+sin6tosa(struct sockaddr_in6 *sin6)
+{
+ return ((struct sockaddr *)(sin6));
+}
+
+static __inline struct in6_ifaddr *
+ifatoia6(struct ifaddr *ifa)
+{
+ return ((struct in6_ifaddr *)(ifa));
+}
#endif /* _KERNEL */
#if __BSD_VISIBLE