summaryrefslogtreecommitdiff
path: root/applets
diff options
context:
space:
mode:
authorMatt Kraai2000-12-15 00:35:22 +0000
committerMatt Kraai2000-12-15 00:35:22 +0000
commit8abc78aa84a88c12fca41ae10e84898ad5089cae (patch)
treea7355d6ab310e8e1ccac7c42cb3c7925790c3314 /applets
parent1b622ff5ac621305855eacf5886c5bc36790e9ec (diff)
downloadbusybox-8abc78aa84a88c12fca41ae10e84898ad5089cae.zip
busybox-8abc78aa84a88c12fca41ae10e84898ad5089cae.tar.gz
Rewrite argv munger.
Diffstat (limited to 'applets')
-rw-r--r--applets/busybox.c33
1 files changed, 11 insertions, 22 deletions
diff --git a/applets/busybox.c b/applets/busybox.c
index 8f27dfb..e6f25af 100644
--- a/applets/busybox.c
+++ b/applets/busybox.c
@@ -150,9 +150,7 @@ int main(int argc, char **argv)
int busybox_main(int argc, char **argv)
{
- int col = 0;
- int ps_index;
- char *index, *index2;
+ int col = 0, len, i;
argc--;
@@ -185,25 +183,16 @@ int busybox_main(int argc, char **argv)
/* Flag that we've been here already */
been_there_done_that = 1;
- /* We do not want the word "busybox" to show up in ps, so we move
- * everything in argv around to fake ps into showing what we want it to
- * show. Since we are only shrinking the string, we don't need to move
- * __environ or any of that tedious stuff... */
- ps_index = 0;
- index=*argv;
- index2=argv[argc];
- index2+=strlen(argv[argc]);
- while(ps_index < argc) {
- argv[ps_index]=index;
- memmove(index, argv[ps_index+1], strlen(argv[ps_index+1])+1);
- index+=(strlen(index));
- *index='\0';
- index++;
- ps_index++;
- }
- while(index<=index2)
- *index++='\0';
- argv[ps_index]=NULL;
+ /* Move the command line down a notch */
+ len = argv[argc] + strlen(argv[argc]) - argv[1];
+ memmove(argv[0], argv[1], len);
+ memset(argv[0] + len, 0, argv[1] - argv[0]);
+
+ /* Fix up the argv pointers */
+ len = argv[1] - argv[0];
+ memmove(argv, argv+1, sizeof(char *) * (argc + 1));
+ for (i = 0; i < argc; i++)
+ argv[i] -= len;
return (main(argc, argv));
}