CLOEXEC fix for older FreeBSDs and OS X.
authorAndrew Walton <awalton@vmware.com>
Tue, 12 Nov 2013 21:04:49 +0000 (13:04 -0800)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 23 Nov 2013 16:01:29 +0000 (11:01 -0500)
Some older POSIX-flavored operating systems may not have adopted
O_CLOEXEC yet.

See https://bugzilla.gnome.org/show_bug.cgi?id=712136.

gio/gsubprocess.c

index ca9b006..bced7a5 100644 (file)
 #define O_BINARY 0
 #endif
 
+#ifndef O_CLOEXEC
+#define O_CLOEXEC 0
+#else
+#define HAVE_O_CLOEXEC 1
+#endif
+
 #define COMMUNICATE_READ_SIZE 4096
 
 /* A GSubprocess can have two possible states: running and not.
@@ -356,6 +362,10 @@ unix_open_file (const char  *filename,
       g_free (display_name);
       /* fall through... */
     }
+#ifndef HAVE_O_CLOEXEC
+  else
+    fcntl (my_fd, F_SETFD, FD_CLOEXEC);
+#endif
 
   return my_fd;
 }