datapath: Define ERR_CAST on kernels that don't already have it.
authorBen Pfaff <blp@nicira.com>
Fri, 17 Apr 2009 21:59:03 +0000 (14:59 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 17 Apr 2009 21:59:19 +0000 (14:59 -0700)
ERR_CAST was introduced in Linux 2.6.25 but it is also backported into the
Red Hat 2.6.18, so we need a configure-time check.

acinclude.m4
datapath/linux-2.6/compat-2.6/include/linux/err.h [new file with mode: 0644]

index 1fc71f4b36da17d16e5f779d4153759bf0b50eb2..a31c72830fd544f46eb6fb36c995cf3d9ec0b1bc 100644 (file)
@@ -135,6 +135,8 @@ AC_DEFUN([OFP_CHECK_LINUX26_COMPAT], [
                   [OFP_DEFINE([HAVE_SKB_COPY_FROM_LINEAR_DATA_OFFSET])])
   OFP_GREP_IFELSE([$KSRC26/include/net/netlink.h], [NLA_NUL_STRING],
                   [OFP_DEFINE([HAVE_NLA_NUL_STRING])])
+  OFP_GREP_IFELSE([$KSRC26/include/linux/err.h], [ERR_CAST],
+                  [OFP_DEFINE([HAVE_ERR_CAST])])
   OFP_CHECK_LOG2_H
   OFP_CHECK_VETH
   if cmp -s datapath/linux-2.6/kcompat.h.new \
diff --git a/datapath/linux-2.6/compat-2.6/include/linux/err.h b/datapath/linux-2.6/compat-2.6/include/linux/err.h
new file mode 100644 (file)
index 0000000..50faf2a
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef __LINUX_ERR_WRAPPER_H
+#define __LINUX_ERR_WRAPPER_H 1
+
+#include_next <linux/err.h>
+
+#ifndef HAVE_ERR_CAST
+/**
+ * ERR_CAST - Explicitly cast an error-valued pointer to another pointer type
+ * @ptr: The pointer to cast.
+ *
+ * Explicitly cast an error-valued pointer to another pointer type in such a
+ * way as to make it clear that's what's going on.
+ */
+static inline void *ERR_CAST(const void *ptr)
+{
+       /* cast away the const */
+       return (void *) ptr;
+}
+#endif /* HAVE_ERR_CAST */
+
+#endif