Introduce FEATURE_EXEC_PREFER_APPLETS = "re-execute our own
[oweals/busybox.git] / libbb / xfuncs.c
index 240ac5d3da06551300e70debdfb02b04847febbc..4252e7646bd7c29e8ee10d9c67c53e908fe0d175 100644 (file)
@@ -183,14 +183,17 @@ pid_t spawn(char **argv)
        /* Why static? */
        static int failed;
        pid_t pid;
-       void *app = ENABLE_FEATURE_SH_STANDALONE_SHELL ? find_applet_by_name(argv[0]) : 0;
+       char *prog;
 
        // Be nice to nommu machines.
        failed = 0;
        pid = vfork();
        if (pid < 0) return pid;
        if (!pid) {
-               execvp(app ? CONFIG_BUSYBOX_EXEC_PATH : *argv, argv);
+               prog = argv[0];
+               if (ENABLE_FEATURE_EXEC_PREFER_APPLETS && find_applet_by_name(prog))
+                       prog = CONFIG_BUSYBOX_EXEC_PATH;
+               execvp(prog, argv);
 
                // We're sharing a stack with blocked parent, let parent know we failed
                // and then exit to unblock parent (but don't run atexit() stuff, which