diff options
author | Denis Vlasenko | 2007-01-21 00:41:04 +0000 |
---|---|---|
committer | Denis Vlasenko | 2007-01-21 00:41:04 +0000 |
commit | 2f0c0d0b8829b8aea97bc09833e172c59b55cd94 (patch) | |
tree | 3e82c2dd94d674a723f3d7df350f32dc8892adc1 /libbb | |
parent | b3f3c23f786a2486a8545ef0d904061ac83e6453 (diff) | |
download | busybox-2f0c0d0b8829b8aea97bc09833e172c59b55cd94.zip busybox-2f0c0d0b8829b8aea97bc09833e172c59b55cd94.tar.gz |
Introduce FEATURE_EXEC_PREFER_APPLETS = "re-execute our own
executable if we asked to exec someting with argv[0] == known_applet"
Use it in init. Also respect PATH in init, remove explicit "/sbin" etc
from exec. Patch by Gabriel L. Somlo <somlo@cmu.edu>
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/xfuncs.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 240ac5d..4252e76 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c @@ -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 |