From bb21944ea0d5e95f07691dfaeaba404ddfa70528 Mon Sep 17 00:00:00 2001
From: vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Date: Sun, 21 Jan 2007 00:41:04 +0000
Subject: 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>

git-svn-id: svn://busybox.net/trunk/busybox@17426 69ca8d6d-28ef-0310-b511-8ec308f3f277
---
 libbb/xfuncs.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

(limited to 'libbb')

diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
index 240ac5d3d..4252e7646 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
-- 
cgit v1.2.3-55-g6feb