summaryrefslogtreecommitdiffstats
path: root/osdep
diff options
context:
space:
mode:
Diffstat (limited to 'osdep')
-rw-r--r--osdep/io.c18
-rw-r--r--osdep/io.h11
2 files changed, 28 insertions, 1 deletions
diff --git a/osdep/io.c b/osdep/io.c
index 94bd90a676..4ad00d8df3 100644
--- a/osdep/io.c
+++ b/osdep/io.c
@@ -19,6 +19,23 @@
*/
#include "config.h"
+#include "osdep/io.h"
+
+// Set the CLOEXEC flag on the given fd.
+// On error, false is returned (and errno set).
+bool mp_set_cloexec(int fd)
+{
+#if defined(FD_CLOEXEC) && defined(F_SETFD)
+ if (fd >= 0) {
+ int flags = fcntl(fd, F_GETFD);
+ if (flags == -1)
+ return false;
+ if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1)
+ return false;
+ }
+#endif
+ return true;
+}
#ifdef _WIN32
@@ -27,7 +44,6 @@
#include <stdio.h>
#include <stddef.h>
-#include "osdep/io.h"
#include "talloc.h"
//copied and modified from libav
diff --git a/osdep/io.h b/osdep/io.h
index d855e852eb..aa20446210 100644
--- a/osdep/io.h
+++ b/osdep/io.h
@@ -20,7 +20,18 @@
#ifndef MPLAYER_OSDEP_IO
#define MPLAYER_OSDEP_IO
+#include <stdbool.h>
#include <limits.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+// This is in POSIX.1-2008, but support outside of Linux is scarce.
+#ifndef O_CLOEXEC
+#define O_CLOEXEC 0
+#endif
+
+bool mp_set_cloexec(int fd);
#ifdef _WIN32
#include <wchar.h>