aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <mcgrathr@chromium.org>2011-09-19 12:50:25 -0700
committerRoland McGrath <mcgrathr@chromium.org>2011-09-19 12:50:25 -0700
commitecb1482ffd85fd3279642b1dc045aa867ad4d415 (patch)
treec8276d86e38abbf88c191dc3623cac89b6425c7c
parentbc7e1c3667b577ad418f7520df2a7dbccea04ee9 (diff)
downloadglibc-ecb1482ffd85fd3279642b1dc045aa867ad4d415.zip
glibc-ecb1482ffd85fd3279642b1dc045aa867ad4d415.tar.gz
glibc-ecb1482ffd85fd3279642b1dc045aa867ad4d415.tar.bz2
Clean up disabling of script_execute
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/posix/spawni.c20
2 files changed, 16 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 30d1822..3aa91f5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2011-09-19 Roland McGrath <roland@hack.frob.com>
+ * sysdeps/posix/spawni.c (script_execute): Always define it.
+ It will be optimized away if unused.
+ (maybe_script_execute): New function.
+ (__spawni): Call it.
+
* Makerules: Don't include tls.make.
(config-tls): Always set to thread.
* tls.make.c: File removed.
diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c
index 129edcd..f849437 100644
--- a/sysdeps/posix/spawni.c
+++ b/sysdeps/posix/spawni.c
@@ -39,7 +39,6 @@
#define SPAWN_ERROR 127
-#if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_15)
/* The file is accessible but it is not an executable file. Invoke
the shell to interpret it as a script. */
static void
@@ -66,11 +65,16 @@ script_execute (const char *file, char *const argv[], char *const envp[])
__execve (new_argv[0], new_argv, envp);
}
}
-# define tryshell (xflags & SPAWN_XFLAGS_TRY_SHELL)
-#else
-# define tryshell 0
-#endif
+static inline void
+maybe_script_execute (const char *file, char *const argv[], char *const envp[],
+ int xflags)
+{
+ if (SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_15)
+ && (xflags & SPAWN_XFLAGS_TRY_SHELL)
+ && errno == ENOEXEC)
+ script_execute (file, argv, envp);
+}
/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
Before running the process perform the actions described in FILE-ACTIONS. */
@@ -237,8 +241,7 @@ __spawni (pid_t *pid, const char *file,
/* The FILE parameter is actually a path. */
__execve (file, argv, envp);
- if (tryshell && errno == ENOEXEC)
- script_execute (file, argv, envp);
+ maybe_script_execute (file, argv, envp, xflags);
/* Oh, oh. `execve' returns. This is bad. */
_exit (SPAWN_ERROR);
@@ -283,8 +286,7 @@ __spawni (pid_t *pid, const char *file,
/* Try to execute this name. If it works, execv will not return. */
__execve (startp, argv, envp);
- if (tryshell && errno == ENOEXEC)
- script_execute (startp, argv, envp);
+ maybe_script_execute (startp, argv, envp, xflags);
switch (errno)
{