aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2013-12-19 21:38:12 -0600
committerRob Landley <rob@landley.net>2013-12-19 21:38:12 -0600
commit6db8529a785e2cab142e840b6e3fbdcc2c02dd1f (patch)
treee22a0b2025f7848f05bcd4f5ed22b57956ef84ea
parentbb5cfb270f924390c2163573cc5ed8fba9f638b8 (diff)
downloadtoybox-6db8529a785e2cab142e840b6e3fbdcc2c02dd1f.tar.gz
Don't permute toys.optargs, cleanup code (xexec()) can free it.
-rw-r--r--main.c2
-rw-r--r--toys/lsb/umount.c5
-rw-r--r--toys/other/hello.c5
-rw-r--r--toys/other/pmap.c6
-rw-r--r--toys/other/pwdx.c8
5 files changed, 17 insertions, 9 deletions
diff --git a/main.c b/main.c
index 53f670d2..7355f0a2 100644
--- 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");
diff --git a/toys/lsb/umount.c b/toys/lsb/umount.c
index 51f3024d..bcc1fff1 100644
--- a/toys/lsb/umount.c
+++ b/toys/lsb/umount.c
@@ -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;
diff --git a/toys/other/hello.c b/toys/other/hello.c
index e87cd6c9..eb80972e 100644
--- a/toys/other/hello.c
+++ b/toys/other/hello.c
@@ -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);
}
diff --git a/toys/other/pmap.c b/toys/other/pmap.c
index 1cc04220..9ef1ade9 100644
--- a/toys/other/pmap.c
+++ b/toys/other/pmap.c
@@ -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";
diff --git a/toys/other/pwdx.c b/toys/other/pwdx.c
index 5be49d62..b2acc411 100644
--- a/toys/other/pwdx.c
+++ b/toys/other/pwdx.c
@@ -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);
}
}