svn commit: trunk/busybox: applets docs/busybox.net include libbb s etc...

vda at busybox.net vda at busybox.net
Wed Oct 10 14:38:48 UTC 2007


Author: vda
Date: 2007-10-10 07:38:47 -0700 (Wed, 10 Oct 2007)
New Revision: 20214

Log:
get rid of global "struct bb_applet *current_applet"



Modified:
   trunk/busybox/applets/applets.c
   trunk/busybox/docs/busybox.net/FAQ.html
   trunk/busybox/include/libbb.h
   trunk/busybox/libbb/appletlib.c
   trunk/busybox/libbb/vfork_daemon_rexec.c
   trunk/busybox/shell/ash.c
   trunk/busybox/shell/hush.c


Changeset:
Modified: trunk/busybox/applets/applets.c
===================================================================
--- trunk/busybox/applets/applets.c	2007-10-10 10:05:35 UTC (rev 20213)
+++ trunk/busybox/applets/applets.c	2007-10-10 14:38:47 UTC (rev 20214)
@@ -28,7 +28,6 @@
 #endif
 
 
-const struct bb_applet *current_applet;
 const char *applet_name;
 #if !BB_MMU
 bool re_execed;
@@ -507,7 +506,7 @@
 	bb_error_msg_and_die("applet not found");
 }
 
-void run_current_applet_and_exit(char **argv)
+void run_appletstruct_and_exit(const struct bb_applet *applet, char **argv)
 {
 	int argc = 1;
 
@@ -518,19 +517,19 @@
 	optind = 1;
 	xfunc_error_retval = EXIT_FAILURE;
 
-	applet_name = current_applet->name;
+	applet_name = applet->name;
 	if (argc == 2 && !strcmp(argv[1], "--help"))
 		bb_show_usage();
 	if (ENABLE_FEATURE_SUID)
-		check_suid(current_applet);
-	exit(current_applet->main(argc, argv));
+		check_suid(applet);
+	exit(applet->main(argc, argv));
 }
 
 void run_applet_and_exit(const char *name, char **argv)
 {
-	current_applet = find_applet_by_name(name);
-	if (current_applet)
-		run_current_applet_and_exit(argv);
+	const struct bb_applet *applet = find_applet_by_name(name);
+	if (applet)
+		run_appletstruct_and_exit(applet, argv);
 	if (!strncmp(name, "busybox", 7))
 		exit(busybox_main(argv));
 }

Modified: trunk/busybox/docs/busybox.net/FAQ.html
===================================================================
--- trunk/busybox/docs/busybox.net/FAQ.html	2007-10-10 10:05:35 UTC (rev 20213)
+++ trunk/busybox/docs/busybox.net/FAQ.html	2007-10-10 14:38:47 UTC (rev 20214)
@@ -568,7 +568,7 @@
 to APPLET_main().</p>
 
 <p>Busybox applets may also be invoked through the multiplexor applet
-"busybox" (see busybox_main() in applets/busybox.c), and through the
+"busybox" (see busybox_main() in libbb/appletlib.c), and through the
 standalone shell (grep for STANDALONE_SHELL in applets/shell/*.c).
 See <a href="FAQ.html#getting_started">getting started</a> in the
 FAQ for more information on these alternate usage mechanisms, which are

Modified: trunk/busybox/include/libbb.h
===================================================================
--- trunk/busybox/include/libbb.h	2007-10-10 10:05:35 UTC (rev 20213)
+++ trunk/busybox/include/libbb.h	2007-10-10 14:38:47 UTC (rev 20214)
@@ -564,7 +564,7 @@
 int spawn_and_wait(char **argv);
 struct nofork_save_area {
 	jmp_buf die_jmp;
-	const struct bb_applet *current_applet;
+	const char *applet_name;
 	int xfunc_error_retval;
 	uint32_t option_mask32;
 	int die_sleep;
@@ -748,7 +748,7 @@
 extern const struct bb_applet *find_applet_by_name(const char *name);
 /* Returns only if applet is not found. */
 extern void run_applet_and_exit(const char *name, char **argv);
-extern void run_current_applet_and_exit(char **argv) ATTRIBUTE_NORETURN;
+extern void run_appletstruct_and_exit(const struct bb_applet *a, char **argv) ATTRIBUTE_NORETURN;
 #endif
 
 extern int match_fstype(const struct mntent *mt, const char *fstypes);
@@ -1040,7 +1040,6 @@
 };
 
 #define FILEUTILS_CP_OPTSTR "pdRfils" USE_SELINUX("c")
-extern const struct bb_applet *current_applet;
 extern const char *applet_name;
 /* "BusyBox vN.N.N (timestamp or extra_vestion)" */
 extern const char bb_banner[];

Modified: trunk/busybox/libbb/appletlib.c
===================================================================
--- trunk/busybox/libbb/appletlib.c	2007-10-10 10:05:35 UTC (rev 20213)
+++ trunk/busybox/libbb/appletlib.c	2007-10-10 14:38:47 UTC (rev 20214)
@@ -133,7 +133,10 @@
 	if (ENABLE_LOCALE_SUPPORT && getpid() != 1)
 		setlocale(LC_ALL, "");
 
-	/* Redundant for busybox, but needed for individual applets */
+#if ENABLE_FEATURE_INDIVIDUAL
+	/* Redundant for busybox (run_applet_and_exit covers that case)
+	 * but needed for "individual applet" mode */
 	if (argv[1] && strcmp(argv[1], "--help") == 0)
 		bb_show_usage();
+#endif
 }

Modified: trunk/busybox/libbb/vfork_daemon_rexec.c
===================================================================
--- trunk/busybox/libbb/vfork_daemon_rexec.c	2007-10-10 10:05:35 UTC (rev 20213)
+++ trunk/busybox/libbb/vfork_daemon_rexec.c	2007-10-10 14:38:47 UTC (rev 20214)
@@ -104,7 +104,7 @@
 void save_nofork_data(struct nofork_save_area *save)
 {
 	memcpy(&save->die_jmp, &die_jmp, sizeof(die_jmp));
-	save->current_applet = current_applet;
+	save->applet_name = applet_name;
 	save->xfunc_error_retval = xfunc_error_retval;
 	save->option_mask32 = option_mask32;
 	save->die_sleep = die_sleep;
@@ -114,19 +114,16 @@
 void restore_nofork_data(struct nofork_save_area *save)
 {
 	memcpy(&die_jmp, &save->die_jmp, sizeof(die_jmp));
-	current_applet = save->current_applet;
+	applet_name = save->applet_name;
 	xfunc_error_retval = save->xfunc_error_retval;
 	option_mask32 = save->option_mask32;
 	die_sleep = save->die_sleep;
-
-	applet_name = current_applet->name;
 }
 
 int run_nofork_applet_prime(struct nofork_save_area *old, const struct bb_applet *a, char **argv)
 {
 	int rc, argc;
 
-	current_applet = a;
 	applet_name = a->name;
 	xfunc_error_retval = EXIT_FAILURE;
 	/*option_mask32 = 0; - not needed */
@@ -193,8 +190,7 @@
 			return wait4pid(rc);
 		/* child */
 		xfunc_error_retval = EXIT_FAILURE;
-		current_applet = a;
-		run_current_applet_and_exit(argv);
+		run_appletstruct_and_exit(a, argv);
 #endif
 	}
 #endif /* FEATURE_PREFER_APPLETS */

Modified: trunk/busybox/shell/ash.c
===================================================================
--- trunk/busybox/shell/ash.c	2007-10-10 10:05:35 UTC (rev 20213)
+++ trunk/busybox/shell/ash.c	2007-10-10 14:38:47 UTC (rev 20214)
@@ -6470,10 +6470,8 @@
 
 		a = find_applet_by_name(cmd);
 		if (a) {
-			if (a->noexec) {
-				current_applet = a;
-				run_current_applet_and_exit(argv);
-			}
+			if (a->noexec)
+				run_appletstruct_and_exit(a, argv);
 			/* re-exec ourselves with the new arguments */
 			execve(bb_busybox_exec_path, argv, envp);
 			/* If they called chroot or otherwise made the binary no longer

Modified: trunk/busybox/shell/hush.c
===================================================================
--- trunk/busybox/shell/hush.c	2007-10-10 10:05:35 UTC (rev 20213)
+++ trunk/busybox/shell/hush.c	2007-10-10 14:38:47 UTC (rev 20214)
@@ -1399,10 +1399,9 @@
 		const struct bb_applet *a = find_applet_by_name(argv[0]);
 		if (a) {
 			if (a->noexec) {
-				current_applet = a;
 				debug_printf_exec("running applet '%s'\n", argv[0]);
-// is it ok that run_current_applet_and_exit() does exit(), not _exit()?
-				run_current_applet_and_exit(argv);
+// is it ok that run_appletstruct_and_exit() does exit(), not _exit()?
+				run_appletstruct_and_exit(a, argv);
 			}
 			/* re-exec ourselves with the new arguments */
 			debug_printf_exec("re-execing applet '%s'\n", argv[0]);




More information about the busybox-cvs mailing list