X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fexecute.c;h=c9f25b52d2a10fa2b8c28cb9f4f85b1d01430840;hb=9955b8682d69afbadc9286a6b6f4e7a4df37fdc7;hp=231f467380346bdfa1d9bf3eef3062b4527f99e4;hpb=04cacfa50524e0e6f11fa82b5a263fac6a8c21ea;p=gnulib.git diff --git a/lib/execute.c b/lib/execute.c index 231f46738..c9f25b52d 100644 --- a/lib/execute.c +++ b/lib/execute.c @@ -1,5 +1,5 @@ /* Creation of autonomous subprocesses. - Copyright (C) 2001-2004, 2006-2008 Free Software Foundation, Inc. + Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc. Written by Bruno Haible , 2001. This program is free software: you can redistribute it and/or modify @@ -44,26 +44,10 @@ #else /* Unix API. */ -# if HAVE_POSIX_SPAWN -# include -# else -# if HAVE_VFORK_H -# include -# endif -# endif +# include #endif -#ifndef STDIN_FILENO -# define STDIN_FILENO 0 -#endif -#ifndef STDOUT_FILENO -# define STDOUT_FILENO 1 -#endif -#ifndef STDERR_FILENO -# define STDERR_FILENO 2 -#endif - /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ #undef open @@ -214,7 +198,6 @@ execute (const char *progname, subprocess to exit with return code 127. It is implementation dependent which error is reported which way. We treat both cases as equivalent. */ -#if HAVE_POSIX_SPAWN sigset_t blocked_signals; posix_spawn_file_actions_t actions; bool actions_allocated; @@ -222,11 +205,7 @@ execute (const char *progname, bool attrs_allocated; int err; pid_t child; -#else - int child; -#endif -#if HAVE_POSIX_SPAWN if (slave_process) { sigprocmask (SIG_SETMASK, NULL, &blocked_signals); @@ -284,48 +263,6 @@ execute (const char *progname, posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); -#else - if (slave_process) - block_fatal_signals (); - /* Use vfork() instead of fork() for efficiency. */ - if ((child = vfork ()) == 0) - { - /* Child process code. */ - int nullinfd; - int nulloutfd; - - if ((!null_stdin - || ((nullinfd = open ("/dev/null", O_RDONLY, 0)) >= 0 - && (nullinfd == STDIN_FILENO - || (dup2 (nullinfd, STDIN_FILENO) >= 0 - && close (nullinfd) >= 0)))) - && (!(null_stdout || null_stderr) - || ((nulloutfd = open ("/dev/null", O_RDWR, 0)) >= 0 - && (!null_stdout - || nulloutfd == STDOUT_FILENO - || dup2 (nulloutfd, STDOUT_FILENO) >= 0) - && (!null_stderr - || nulloutfd == STDERR_FILENO - || dup2 (nulloutfd, STDERR_FILENO) >= 0) - && ((null_stdout && nulloutfd == STDOUT_FILENO) - || (null_stderr && nulloutfd == STDERR_FILENO) - || close (nulloutfd) >= 0))) - && (!slave_process || (unblock_fatal_signals (), true))) - execvp (prog_path, prog_argv); - _exit (127); - } - if (child == -1) - { - if (slave_process) - unblock_fatal_signals (); - if (termsigp != NULL) - *termsigp = 0; - if (exit_on_error || !null_stderr) - error (exit_on_error ? EXIT_FAILURE : 0, errno, - _("%s subprocess failed"), progname); - return 127; - } -#endif if (slave_process) { register_slave_subprocess (child);