OSDN Git Service

Don't permute toys.optargs, cleanup code (xexec()) can free it.
authorRob Landley <rob@landley.net>
Fri, 20 Dec 2013 03:38:12 +0000 (21:38 -0600)
committerRob Landley <rob@landley.net>
Fri, 20 Dec 2013 03:38:12 +0000 (21:38 -0600)
main.c
toys/lsb/umount.c
toys/other/hello.c
toys/other/pmap.c
toys/other/pwdx.c

diff --git a/main.c b/main.c
index 53f670d..7355f0a 100644 (file)
--- a/main.c
+++ b/main.c
@@ -92,7 +92,7 @@ void toy_init(struct toy_list *which, char *argv[])
     uid_t uid = getuid(), euid = geteuid();
 
     if (!(which->flags & TOYFLAG_STAYROOT)) {
-      if (uid != euid) xsetuid(euid=uid);
+      if (uid != euid) xsetuid(euid=uid); // drop root
     } else if (CFG_TOYBOX_DEBUG && uid && which != toy_list)
       error_msg("Not installed suid root");
 
index 51f3024..bcc1fff 100644 (file)
@@ -91,7 +91,7 @@ static void do_umount(char *dir, int flags)
     return;
   }
   if (toys.optflags & FLAG_r) {
-    if (!mount("", *toys.optargs, "", MS_REMOUNT|MS_RDONLY, "")) {
+    if (!mount("", dir, "", MS_REMOUNT|MS_RDONLY, "")) {
       if (toys.optflags & FLAG_v) printf("%s remounted ro", dir);
       return;
     }
@@ -102,6 +102,7 @@ static void do_umount(char *dir, int flags)
 void umount_main(void)
 {
   int flags=0;
+  char **optargs;
 
   if (!toys.optc && !(toys.optflags & FLAG_a))
     error_exit("Need 1 arg or -a");
@@ -109,7 +110,7 @@ void umount_main(void)
   if (toys.optflags & FLAG_f) flags |= MNT_FORCE;
   if (toys.optflags & FLAG_l) flags |= MNT_DETACH;
 
-  for (; *toys.optargs; toys.optargs++) do_umount(*toys.optargs, flags);
+  for (optargs = toys.optargs; *optargs; optargs++) do_umount(*optargs, flags);
 
   if (toys.optflags & FLAG_a) {
     struct mtab_list *mlsave, *ml;
index e87cd6c..eb80972 100644 (file)
@@ -41,6 +41,8 @@ GLOBALS(
 
 void hello_main(void)
 {
+  char **optargs;
+
   printf("Hello world\n");
 
   if (toys.optflags) printf("flags=%x\n", toys.optflags);
@@ -52,7 +54,8 @@ void hello_main(void)
     TT.d_list = TT.d_list->next;
   }
   if (TT.e_count) printf("e was seen %ld times\n", TT.e_count);
-  while (*toys.optargs) printf("optarg=%s\n", *(toys.optargs++));
+  for (optargs = toys.optargs; *optargs; optargs++)
+    printf("optarg=%s\n", *optargs);
   if (toys.optflags & FLAG_walrus) printf("Saw --walrus\n");
   if (TT.blubber_string) printf("--blubber=%s\n", TT.blubber_string);
 }
index 1cc0422..9ef1ade 100644 (file)
@@ -24,8 +24,10 @@ config PMAP
 
 void pmap_main(void)
 {
-  while (*toys.optargs) {
-    pid_t pid = atolx(*toys.optargs++);
+  char **optargs;
+
+  for (optargs = toys.optargs; *optargs; optargs++) {
+    pid_t pid = atolx(*optargs);
     FILE *fp;
     char *line, *oldline = 0, *name = 0,
          *k = (toys.optflags & FLAG_x) ? "" : "K";
index 5be49d6..b2acc41 100644 (file)
@@ -17,11 +17,13 @@ config PWDX
 
 void pwdx_main(void)
 {
-  for (; *toys.optargs; toys.optargs++) {
+  char **optargs;
+
+  for (optargs = toys.optargs; *optargs; optargs++) {
     char *path;
     int num_bytes;
 
-    path = xmsprintf("/proc/%s/cwd", *toys.optargs);
+    path = xmsprintf("/proc/%s/cwd", *optargs);
     num_bytes = readlink(path, toybuf, sizeof(toybuf)-1);
     free(path);
 
@@ -32,6 +34,6 @@ void pwdx_main(void)
       path = toybuf;
       toybuf[num_bytes] = 0;
     }
-    xprintf("%s: %s\n", *toys.optargs, path);
+    xprintf("%s: %s\n", *optargs, path);
   }
 }