changeset 1528:ec07449e8e4a draft

Add TOYBOX_NORECURSE so xexec() won't make internal function calls.
author Rob Landley <rob@landley.net>
date Mon, 20 Oct 2014 19:52:29 -0500
parents 49410d68ee40
children e127aa575ff2
files Config.in lib/xwrap.c
diffstat 2 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/Config.in	Sun Oct 19 12:08:25 2014 -0500
+++ b/Config.in	Mon Oct 20 19:52:29 2014 -0500
@@ -71,6 +71,19 @@
 	  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 @@
 	default 500
 	help
 	  When commands like useradd/groupadd allocate user IDs, start here.
-
 endmenu
--- a/lib/xwrap.c	Sun Oct 19 12:08:25 2014 -0500
+++ b/lib/xwrap.c	Mon Oct 20 19:52:29 2014 -0500
@@ -137,7 +137,7 @@
 // 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]);