Merge branch '1488-o-cloexec-again' into 'master'

gspawn: Use fcntl() to work around systems which don’t support O_CLOEXEC

Closes #1488

See merge request GNOME/glib!242
diff --git a/glib/gspawn.c b/glib/gspawn.c
index 1ab3307..e273e2a 100644
--- a/glib/gspawn.c
+++ b/glib/gspawn.c
@@ -81,6 +81,12 @@
 extern char **environ;
 #endif
 
+#ifndef O_CLOEXEC
+#define O_CLOEXEC 0
+#else
+#define HAVE_O_CLOEXEC 1
+#endif
+
 /**
  * SECTION:spawn
  * @Short_description: process launching
@@ -1454,6 +1460,10 @@
       g_assert (read_null != -1);
       parent_close_fds[num_parent_close_fds++] = read_null;
 
+#ifndef HAVE_O_CLOEXEC
+      fcntl (read_null, F_SETFD, FD_CLOEXEC);
+#endif
+
       r = posix_spawn_file_actions_adddup2 (&file_actions, read_null, 0);
       if (r != 0)
         goto out_close_fds;
@@ -1474,6 +1484,10 @@
       g_assert (write_null != -1);
       parent_close_fds[num_parent_close_fds++] = write_null;
 
+#ifndef HAVE_O_CLOEXEC
+      fcntl (read_null, F_SETFD, FD_CLOEXEC);
+#endif
+
       r = posix_spawn_file_actions_adddup2 (&file_actions, write_null, 1);
       if (r != 0)
         goto out_close_fds;
@@ -1494,6 +1508,10 @@
       g_assert (write_null != -1);
       parent_close_fds[num_parent_close_fds++] = write_null;
 
+#ifndef HAVE_O_CLOEXEC
+      fcntl (read_null, F_SETFD, FD_CLOEXEC);
+#endif
+
       r = posix_spawn_file_actions_adddup2 (&file_actions, write_null, 2);
       if (r != 0)
         goto out_close_fds;