Blame SOURCES/0106-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch

e44045
From dfb0460fb4743aec047cdf755a660a9ac2d0f3fb Mon Sep 17 00:00:00 2001
e44045
From: Tanu Kaskinen <tanuk@iki.fi>
e44045
Date: Wed, 24 Jan 2018 03:51:49 +0200
e44045
Subject: [PATCH 106/106] memfd-wrappers: only define memfd_create() if not
e44045
 already defined
e44045
e44045
glibc 2.27 is to be released soon, and it will provide memfd_create().
e44045
If glibc provides the function, we must not define it ourselves,
e44045
otherwise building fails due to conflict between the two implementations
e44045
of the same function.
e44045
e44045
BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=104733
e44045
---
e44045
 configure.ac                   | 3 +++
e44045
 src/pulsecore/memfd-wrappers.h | 7 ++++---
e44045
 2 files changed, 7 insertions(+), 3 deletions(-)
e44045
e44045
diff --git a/configure.ac b/configure.ac
e44045
index 0084c86e..0eb44b08 100644
e44045
--- a/configure.ac
e44045
+++ b/configure.ac
e44045
@@ -610,6 +610,9 @@ AS_IF([test "x$enable_memfd" = "xyes" && test "x$HAVE_MEMFD" = "x0"],
e44045
     [AC_MSG_ERROR([*** Your Linux kernel does not support memfd shared memory.
e44045
                   *** Use linux v3.17 or higher for such a feature.])])
e44045
 
e44045
+AS_IF([test "x$HAVE_MEMFD" = "x1"],
e44045
+    AC_CHECK_FUNCS([memfd_create]))
e44045
+
e44045
 AC_SUBST(HAVE_MEMFD)
e44045
 AM_CONDITIONAL([HAVE_MEMFD], [test "x$HAVE_MEMFD" = x1])
e44045
 AS_IF([test "x$HAVE_MEMFD" = "x1"], AC_DEFINE([HAVE_MEMFD], 1, [Have memfd shared memory.]))
e44045
diff --git a/src/pulsecore/memfd-wrappers.h b/src/pulsecore/memfd-wrappers.h
e44045
index 3bed9b2b..c7aadfd3 100644
e44045
--- a/src/pulsecore/memfd-wrappers.h
e44045
+++ b/src/pulsecore/memfd-wrappers.h
e44045
@@ -20,13 +20,14 @@
e44045
   License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
e44045
 ***/
e44045
 
e44045
-#ifdef HAVE_MEMFD
e44045
+#if defined(HAVE_MEMFD) && !defined(HAVE_MEMFD_CREATE)
e44045
 
e44045
 #include <sys/syscall.h>
e44045
 #include <fcntl.h>
e44045
 
e44045
 /*
e44045
- * No glibc wrappers exist for memfd_create(2), so provide our own.
e44045
+ * Before glibc version 2.27 there was no wrapper for memfd_create(2),
e44045
+ * so we have to provide our own.
e44045
  *
e44045
  * Also define memfd fcntl sealing macros. While they are already
e44045
  * defined in the kernel header file <linux/fcntl.h>, that file as
e44045
@@ -63,6 +64,6 @@ static inline int memfd_create(const char *name, unsigned int flags) {
e44045
 #define F_SEAL_WRITE    0x0008  /* prevent writes */
e44045
 #endif
e44045
 
e44045
-#endif /* HAVE_MEMFD */
e44045
+#endif /* HAVE_MEMFD && !HAVE_MEMFD_CREATE */
e44045
 
e44045
 #endif
e44045
-- 
e44045
2.14.3
e44045