Clean up disabling of script_execute
authorRoland McGrath <mcgrathr@chromium.org>
Mon, 19 Sep 2011 19:50:25 +0000 (12:50 -0700)
committerRoland McGrath <mcgrathr@chromium.org>
Mon, 19 Sep 2011 19:50:25 +0000 (12:50 -0700)
ChangeLog
sysdeps/posix/spawni.c

index 30d1822..3aa91f5 100644 (file)
--- 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.
index 129edcd..f849437 100644 (file)
@@ -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)
        {