diff options
author | Matt Kraai <kraai@debian.org> | 2000-12-15 00:35:22 +0000 |
---|---|---|
committer | Matt Kraai <kraai@debian.org> | 2000-12-15 00:35:22 +0000 |
commit | 8abc78aa84a88c12fca41ae10e84898ad5089cae (patch) | |
tree | a7355d6ab310e8e1ccac7c42cb3c7925790c3314 | |
parent | 1b622ff5ac621305855eacf5886c5bc36790e9ec (diff) | |
download | busybox-8abc78aa84a88c12fca41ae10e84898ad5089cae.tar.gz |
Rewrite argv munger.
-rw-r--r-- | applets/busybox.c | 33 | ||||
-rw-r--r-- | busybox.c | 33 |
2 files changed, 22 insertions, 44 deletions
diff --git a/applets/busybox.c b/applets/busybox.c index 8f27dfb8e..e6f25afb5 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)); } @@ -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)); } |