From c93bb184ce996c4d77eefbae2ab0bf74f396ec45 Mon Sep 17 00:00:00 2001
From: Baruch Siach <baruch@tkos.co.il>
Date: Tue, 13 Mar 2018 06:53:06 +0200
Subject: [PATCH] memfd: fix build with glibc 2.27

glibc 2.27 added a wrapper for memfd_create(). This causes build
failure:

fds/memfd.c:19:12: error: static declaration of 'memfd_create' follows non-static declaration
 static int memfd_create(__unused__ const char *uname, __unused__ unsigned int flag)
            ^~~~~~~~~~~~

Don't use the local definition when the libc provides one.

Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
Upstream status: https://github.com/kernelslacker/trinity/pull/23

 configure   | 23 +++++++++++++++++++++++
 fds/memfd.c |  3 +++
 2 files changed, 26 insertions(+)

diff --git a/configure b/configure
index dc0a87d8c1ad..c0166af33048 100755
--- a/configure
+++ b/configure
@@ -288,6 +288,29 @@ else
 	echo "#define USE_BTRFS 1" >> $CONFIGH
 fi
 
+#############################################################################################
+# Does glibc provide memfd_create() syscall wrapper
+#
+echo -n "[*] Checking if glibc provides memfd_create.. "
+rm -f "$TMP" || exit 1
+
+cat >"$TMP.c" << EOF
+#include <sys/mman.h>
+
+void main()
+{
+	memfd_create();
+}
+EOF
+
+${CC} ${CFLAGS} "$TMP.c" -o "$TMP" &>"$TMP.log"
+if [ ! -x "$TMP" ]; then
+	echo $RED "[NO]" $COL_RESET
+else
+	echo $GREEN "[YES]" $COL_RESET
+	echo "#define USE_MEMFD_CREATE 1" >> $CONFIGH
+fi
+
 #############################################################################################
 
 check_header linux/caif/caif_socket.h USE_CAIF
diff --git a/fds/memfd.c b/fds/memfd.c
index 210678e4571c..aaaac2f78f54 100644
--- a/fds/memfd.c
+++ b/fds/memfd.c
@@ -5,6 +5,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <sys/mman.h>
 
 #include "fd.h"
 #include "memfd.h"
@@ -16,6 +17,7 @@
 #include "trinity.h"
 #include "udp.h"
 
+#ifndef USE_MEMFD_CREATE
 static int memfd_create(__unused__ const char *uname, __unused__ unsigned int flag)
 {
 #ifdef SYS_memfd_create
@@ -24,6 +26,7 @@ static int memfd_create(__unused__ const char *uname, __unused__ unsigned int fl
 	return -ENOSYS;
 #endif
 }
+#endif
 
 static void memfd_destructor(struct object *obj)
 {
-- 
2.16.1

