[BusyBox-cvs] busybox/shell ash.c,1.65,1.66

Glenn McGrath bug1 at busybox.net
Mon Dec 23 10:23:14 UTC 2002


Update of /var/cvs/busybox/shell
In directory winder:/tmp/cvs-serv21751/shell

Modified Files:
	ash.c 
Log Message:
Fix STANDALONE_SHELL and ALWAYS_WIN options, last_path_73 by Vladimir N. Oleynik


Index: ash.c
===================================================================
RCS file: /var/cvs/busybox/shell/ash.c,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -d -r1.65 -r1.66
--- ash.c	11 Dec 2002 21:13:00 -0000	1.65
+++ ash.c	23 Dec 2002 10:23:10 -0000	1.66
@@ -3280,20 +3280,34 @@
 	int repeated = 0;
 
 #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL
+	int flg_bb = 0;
 	char *name = cmd;
-	char **argv_l = argv;
-	int argc_l;
 
 #ifdef CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN
 	name = get_last_path_component(name);
+	if(find_applet_by_name(name) != NULL)
+		flg_bb = 1;
+#else
+	if(strchr(name, '/') == NULL && find_applet_by_name(name) != NULL) {
+		flg_bb = 1;
+	}
 #endif
-	argv_l = envp;
-	for (argc_l = 0; *argv_l != NULL; argv_l++, argc_l++)
-		putenv(*argv_l);
-	argv_l = argv;
-	for (argc_l = 0; *argv_l != NULL; argv_l++, argc_l++)
-		optind = 1;
-	run_applet_by_name(name, argc_l, argv);
+	if(flg_bb) {
+		char **ap;
+		char **new;
+
+		*argv = name;
+		if(strcmp(name, "busybox")) {
+			for (ap = argv; *ap; ap++);
+			ap = new = xmalloc((ap - argv + 2) * sizeof(char *));
+			*ap++ = cmd = "/bin/busybox";
+			while ((*ap++ = *argv++));
+			argv = new;
+			repeated++;
+		} else {
+			cmd = "/bin/busybox";
+		}
+	}
 #endif
   repeat:
 	execve(cmd, argv, envp);




More information about the busybox-cvs mailing list