summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2014-10-20 19:52:29 -0500
committerRob Landley <rob@landley.net>2014-10-20 19:52:29 -0500
commit977e48e1626b3e3f1f1f9b14f05ffc11e252455f (patch)
treebcc50a517b5e6aed0a5f1be74b74c72bd491a716
parent8aa527684c837c18621b76f5ef440caa2f05d0b0 (diff)
downloadtoybox-977e48e1626b3e3f1f1f9b14f05ffc11e252455f.tar.gz
toybox-977e48e1626b3e3f1f1f9b14f05ffc11e252455f.tar.bz2
toybox-977e48e1626b3e3f1f1f9b14f05ffc11e252455f.zip
Add TOYBOX_NORECURSE so xexec() won't make internal function calls.
-rw-r--r--Config.in14
-rw-r--r--lib/xwrap.c2
2 files changed, 14 insertions, 2 deletions
diff --git a/Config.in b/Config.in
index c546fc4..29cf4e1 100644
--- a/Config.in
+++ b/Config.in
@@ -71,6 +71,19 @@ config TOYBOX_FREE
without a real OS (ala newlib+libgloss), enable this to make toybox
clean up after itself.
+config TOYBOX_NORECURSE
+ bool "Disable recursive execution"
+ default n
+ help
+ When one toybox command calls another, usually it just calls the new
+ command's main() function rather than searching the $PATH and calling
+ exec on another file (which is much slower).
+
+ This disables that optimization, so toybox will run external commands
+ even when it has a built-in version of that command. This requires
+ toybox symlinks to be installed in the $PATH, or re-invoking the
+ "toybox" multiplexer command by name.
+
config TOYBOX_DEBUG
bool "Debugging tests"
default n
@@ -89,5 +102,4 @@ config TOYBOX_UID_USR
default 500
help
When commands like useradd/groupadd allocate user IDs, start here.
-
endmenu
diff --git a/lib/xwrap.c b/lib/xwrap.c
index 341aac3..b7eb274 100644
--- a/lib/xwrap.c
+++ b/lib/xwrap.c
@@ -137,7 +137,7 @@ void xexec_optargs(int skip)
// with a path isn't a builtin, so /bin/sh won't match the builtin sh.
void xexec(char **argv)
{
- if (CFG_TOYBOX) toy_exec(argv);
+ if (CFG_TOYBOX && !CFG_TOYBOX_NORECURSE) toy_exec(argv);
execvp(argv[0], argv);
perror_exit("exec %s", argv[0]);