From 8abc78aa84a88c12fca41ae10e84898ad5089cae Mon Sep 17 00:00:00 2001 From: Matt Kraai Date: Fri, 15 Dec 2000 00:35:22 +0000 Subject: [PATCH] Rewrite argv munger. --- applets/busybox.c | 33 +++++++++++---------------------- 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)); } diff --git a/busybox.c b/busybox.c index 8f27dfb8e..e6f25afb5 100644 --- a/busybox.c +++ b/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)); }