svn commit: trunk/busybox: coreutils shell

vda at busybox.net vda at busybox.net
Tue May 8 17:27:18 UTC 2007


Author: vda
Date: 2007-05-08 10:27:17 -0700 (Tue, 08 May 2007)
New Revision: 18585

Log:
tail: fix SEGV on "tail -N"
config system: clarify PREFER_APPLETS/SH_STANDALONE effects in help text



Modified:
   trunk/busybox/Config.in
   trunk/busybox/coreutils/tail.c
   trunk/busybox/shell/Config.in


Changeset:
Modified: trunk/busybox/Config.in
===================================================================
--- trunk/busybox/Config.in	2007-05-08 15:57:31 UTC (rev 18584)
+++ trunk/busybox/Config.in	2007-05-08 17:27:17 UTC (rev 18585)
@@ -244,8 +244,13 @@
 	help
 	  This is an experimental option which directs applets about to
 	  call 'exec' to try and find an applicable busybox applet before
-	  searching the PATH. This may affect shell, find -exec, xargs and
-	  similar programs.
+	  searching the PATH. This is typically done by exec'ing
+	  /proc/self/exe.
+	  This may affect shell, find -exec, xargs and similar applets.
+	  They will use applets even if /bin/<applet> -> busybox link
+	  is missing (or is not a link to busybox). However, this causes
+	  problems in chroot jails without mounted /proc and with ps/top
+	  (command name can be shown as 'exe' for applets started this way).
 
 config BUSYBOX_EXEC_PATH
 	string "Path to BusyBox executable"

Modified: trunk/busybox/coreutils/tail.c
===================================================================
--- trunk/busybox/coreutils/tail.c	2007-05-08 15:57:31 UTC (rev 18584)
+++ trunk/busybox/coreutils/tail.c	2007-05-08 17:27:17 UTC (rev 18585)
@@ -79,7 +79,8 @@
 	unsigned sleep_period = 1;
 	bool from_top;
 	int header_threshhold = 1;
-	const char *str_c, *str_n, *str_s;
+	const char *str_c, *str_n;
+	USE_FEATURE_FANCY_TAIL(const char *str_s;)
 
 	char *tailbuf;
 	size_t tailbufsize;
@@ -96,13 +97,18 @@
 	if (argc >= 2 && (argv[1][0] == '+' || argv[1][0] == '-')
 	 && isdigit(argv[1][1])
 	) {
-		argv[0] = (char*)"-n";
-		argv--;
-		argc++;
+		/* replacing arg[0] with "-n" can segfault, so... */
+		argv[1] = xasprintf("-n%s", argv[1]);
+#if 0 /* If we ever decide to make tail NOFORK */
+		char *s = alloca(strlen(argv[1]) + 3);
+		sprintf(s, "-n%s", argv[1]);
+		argv[1] = s;
+#endif
 	}
 #endif
 
-	opt = getopt32(argc, argv, "fc:n:" USE_FEATURE_FANCY_TAIL("qs:v"), &str_c, &str_n, &str_s);
+	opt = getopt32(argc, argv, "fc:n:" USE_FEATURE_FANCY_TAIL("qs:v"),
+			&str_c, &str_n USE_FEATURE_FANCY_TAIL(,&str_s));
 #define FOLLOW (opt & 0x1)
 #define COUNT_BYTES (opt & 0x2)
 	//if (opt & 0x1) // -f

Modified: trunk/busybox/shell/Config.in
===================================================================
--- trunk/busybox/shell/Config.in	2007-05-08 15:57:31 UTC (rev 18584)
+++ trunk/busybox/shell/Config.in	2007-05-08 17:27:17 UTC (rev 18585)
@@ -242,7 +242,7 @@
 	default n
 	depends on (MSH || LASH || HUSH || ASH) && FEATURE_PREFER_APPLETS
 	help
-	  This option causes the selected busybox shell to use busybox applets
+	  This option causes busybox shells to use busybox applets
 	  in preference to executables in the PATH whenever possible.  For
 	  example, entering the command 'ifconfig' into the shell would cause
 	  busybox to use the ifconfig busybox applet.  Specifying the fully
@@ -251,14 +251,23 @@
 	  is generally used when creating a statically linked version of busybox
 	  for use as a rescue shell, in the event that you screw up your system.
 
-	  Note that this will *also* cause applets to take precedence
-	  over shell builtins of the same name.  So turning this on will
-	  eliminate any performance gained by turning on the builtin "echo"
-	  and "test" commands in ash.
+	  This is implemented by re-execing /proc/self/exe (typically)
+	  with right parameters. Some selected applets ("NOFORK" applets)
+	  can even be executed without creating new process.
+	  Instead, busybox will call <applet>_main() internally.
 
-	  Note that when using this option, the shell will attempt to directly
-	  run '/bin/busybox'.  If you do not have the busybox binary sitting in
-	  that exact location with that exact name, this option will not work at
-	  all.
+	  However, this causes problems in chroot jails without mounted /proc
+	  and with ps/top (command name can be shown as 'exe' for applets
+	  started this way).
+# untrue?
+#	  Note that this will *also* cause applets to take precedence
+#	  over shell builtins of the same name.  So turning this on will
+#	  eliminate any performance gained by turning on the builtin "echo"
+#	  and "test" commands in ash.
+# untrue?
+#	  Note that when using this option, the shell will attempt to directly
+#	  run '/bin/busybox'.  If you do not have the busybox binary sitting in
+#	  that exact location with that exact name, this option will not work at
+#	  all.
 
 endmenu




More information about the busybox-cvs mailing list