[glib] Revert "gspawn: support creating pipes with O_CLOEXEC"



commit 75de24ca667b0acd82ef736cac1808add81fa637
Author: Michael Natterer <mitch gimp org>
Date:   Thu Nov 15 15:22:37 2012 +0100

    Revert "gspawn: support creating pipes with O_CLOEXEC"
    
    This reverts commit 2054ccad95cfdcf5eccd2ef6847c12039c9678e8.

 glib/gspawn.c |   37 ++++++++++++++++++++++++++-----------
 glib/gspawn.h |    5 +----
 2 files changed, 27 insertions(+), 15 deletions(-)
---
diff --git a/glib/gspawn.c b/glib/gspawn.c
index 718cc62..3545a78 100644
--- a/glib/gspawn.c
+++ b/glib/gspawn.c
@@ -53,7 +53,7 @@
 #include "gtestutils.h"
 #include "gutils.h"
 #include "glibintl.h"
-#include "glib-unix.h"
+
 
 /**
  * SECTION:spawn
@@ -69,6 +69,8 @@ static gint g_execute (const gchar  *file,
                        gboolean search_path,
                        gboolean search_path_from_envp);
 
+static gboolean make_pipe            (gint                  p[2],
+                                      GError              **error);
 static gboolean fork_exec_with_pipes (gboolean              intermediate_child,
                                       const gchar          *working_directory,
                                       gchar               **argv,
@@ -80,7 +82,6 @@ static gboolean fork_exec_with_pipes (gboolean              intermediate_child,
                                       gboolean              stderr_to_null,
                                       gboolean              child_inherits_stdin,
                                       gboolean              file_and_argv_zero,
-                                      gboolean              cloexec_pipes,
                                       GSpawnChildSetupFunc  child_setup,
                                       gpointer              user_data,
                                       GPid                 *child_pid,
@@ -311,7 +312,6 @@ g_spawn_sync (const gchar          *working_directory,
                              (flags & G_SPAWN_STDERR_TO_DEV_NULL) != 0,
                              (flags & G_SPAWN_CHILD_INHERITS_STDIN) != 0,
                              (flags & G_SPAWN_FILE_AND_ARGV_ZERO) != 0,
-                             (flags & G_SPAWN_CLOEXEC_PIPES) != 0,
                              child_setup,
                              user_data,
                              &pid,
@@ -679,7 +679,6 @@ g_spawn_async_with_pipes (const gchar          *working_directory,
                                (flags & G_SPAWN_STDERR_TO_DEV_NULL) != 0,
                                (flags & G_SPAWN_CHILD_INHERITS_STDIN) != 0,
                                (flags & G_SPAWN_FILE_AND_ARGV_ZERO) != 0,
-                               (flags & G_SPAWN_CLOEXEC_PIPES) != 0,
                                child_setup,
                                user_data,
                                child_pid,
@@ -1312,7 +1311,6 @@ fork_exec_with_pipes (gboolean              intermediate_child,
                       gboolean              stderr_to_null,
                       gboolean              child_inherits_stdin,
                       gboolean              file_and_argv_zero,
-                      gboolean              cloexec_pipes,
                       GSpawnChildSetupFunc  child_setup,
                       gpointer              user_data,
                       GPid                 *child_pid,
@@ -1327,22 +1325,21 @@ fork_exec_with_pipes (gboolean              intermediate_child,
   gint stderr_pipe[2] = { -1, -1 };
   gint child_err_report_pipe[2] = { -1, -1 };
   gint child_pid_report_pipe[2] = { -1, -1 };
-  guint pipe_flags = cloexec_pipes ? FD_CLOEXEC : 0;
   gint status;
   
-  if (!g_unix_open_pipe (child_err_report_pipe, pipe_flags, error))
+  if (!make_pipe (child_err_report_pipe, error))
     return FALSE;
 
-  if (intermediate_child && !g_unix_open_pipe (child_pid_report_pipe, pipe_flags, error))
+  if (intermediate_child && !make_pipe (child_pid_report_pipe, error))
     goto cleanup_and_fail;
   
-  if (standard_input && !g_unix_open_pipe (stdin_pipe, pipe_flags, error))
+  if (standard_input && !make_pipe (stdin_pipe, error))
     goto cleanup_and_fail;
   
-  if (standard_output && !g_unix_open_pipe (stdout_pipe, pipe_flags, error))
+  if (standard_output && !make_pipe (stdout_pipe, error))
     goto cleanup_and_fail;
 
-  if (standard_error && !g_unix_open_pipe (stderr_pipe, FD_CLOEXEC, error))
+  if (standard_error && !make_pipe (stderr_pipe, error))
     goto cleanup_and_fail;
 
   pid = fork ();
@@ -1626,6 +1623,24 @@ fork_exec_with_pipes (gboolean              intermediate_child,
   return FALSE;
 }
 
+static gboolean
+make_pipe (gint     p[2],
+           GError **error)
+{
+  if (pipe (p) < 0)
+    {
+      gint errsv = errno;
+      g_set_error (error,
+                   G_SPAWN_ERROR,
+                   G_SPAWN_ERROR_FAILED,
+                   _("Failed to create pipe for communicating with child process (%s)"),
+                   g_strerror (errsv));
+      return FALSE;
+    }
+  else
+    return TRUE;
+}
+
 /* Based on execvp from GNU C Library */
 
 static void
diff --git a/glib/gspawn.h b/glib/gspawn.h
index c5586b1..1120d81 100644
--- a/glib/gspawn.h
+++ b/glib/gspawn.h
@@ -166,8 +166,6 @@ typedef void (* GSpawnChildSetupFunc) (gpointer user_data);
  * @G_SPAWN_SEARCH_PATH_FROM_ENVP: if <literal>argv[0]</literal> is not an abolute path,
  *   it will be looked for in the <envar>PATH</envar> from the passed child 
  *   environment. Since: 2.34
- * @G_SPAWN_CLOEXEC_PIPES: On UNIX, returned pipe file descriptors will have the
- *   close-on-exec flag set.  Since: 2.36
  *
  * Flags passed to g_spawn_sync(), g_spawn_async() and g_spawn_async_with_pipes().
  */
@@ -182,8 +180,7 @@ typedef enum
   G_SPAWN_STDERR_TO_DEV_NULL     = 1 << 4,
   G_SPAWN_CHILD_INHERITS_STDIN   = 1 << 5,
   G_SPAWN_FILE_AND_ARGV_ZERO     = 1 << 6,
-  G_SPAWN_SEARCH_PATH_FROM_ENVP  = 1 << 7,
-  G_SPAWN_CLOEXEC_PIPES          = 1 << 8
+  G_SPAWN_SEARCH_PATH_FROM_ENVP  = 1 << 7
 } GSpawnFlags;
 
 GQuark g_spawn_error_quark (void);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]