aboutsummaryrefslogtreecommitdiff
path: root/findutils/xargs.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2000-09-24 01:12:54 +0000
committerEric Andersen <andersen@codepoet.org>2000-09-24 01:12:54 +0000
commit9ae38386575513dfed2a7eba4eb53869d17dca2d (patch)
tree95988f4de92ec22b417d3c371e231369a8cdd4ce /findutils/xargs.c
parent1b1cfde1f8d66eafb1faa1b3272f9dac4c3b5b5b (diff)
downloadbusybox-w32-9ae38386575513dfed2a7eba4eb53869d17dca2d.tar.gz
busybox-w32-9ae38386575513dfed2a7eba4eb53869d17dca2d.tar.bz2
busybox-w32-9ae38386575513dfed2a7eba4eb53869d17dca2d.zip
Fix xargs option parsing
Diffstat (limited to 'findutils/xargs.c')
-rw-r--r--findutils/xargs.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/findutils/xargs.c b/findutils/xargs.c
index bf68cf768..a6f8058fc 100644
--- a/findutils/xargs.c
+++ b/findutils/xargs.c
@@ -37,34 +37,39 @@ int xargs_main(int argc, char **argv)
37 char traceflag = 0; 37 char traceflag = 0;
38 int len_args_from_cmdline, len_cmd_to_be_executed, len, opt; 38 int len_args_from_cmdline, len_cmd_to_be_executed, len, opt;
39 39
40 while ((opt = getopt(argc, argv, "t")) != EOF) { 40 /* Note that we do not use getopt here, since
41 switch (opt) { 41 * we only want to interpret initial options,
42 case 't': 42 * not options passed to commands */
43 traceflag=1; 43 while (--argc && **(++argv) == '-') {
44 break; 44 while (*++(*argv)) {
45 default: 45 switch (**argv) {
46 fatalError(xargs_usage); 46 case 't':
47 traceflag=1;
48 break;
49 default:
50 fatalError(xargs_usage);
51 }
47 } 52 }
48 } 53 }
49 54
50 /* Store the command and arguments to be executed (from the command line) */ 55 /* Store the command and arguments to be executed (from the command line) */
51 if (optind == argc) { 56 if (argc == 1) {
52 len_args_from_cmdline = 6; 57 len_args_from_cmdline = 6;
53 args_from_cmdline = xmalloc(len_args_from_cmdline); 58 args_from_cmdline = xmalloc(len_args_from_cmdline);
54 strcat(args_from_cmdline, "echo "); 59 strcat(args_from_cmdline, "echo ");
55 } else { 60 } else {
56 opt=strlen(argv[optind]); 61 opt=strlen(*argv);
57 len_args_from_cmdline = (opt > 10)? opt : 10; 62 len_args_from_cmdline = (opt > 10)? opt : 10;
58 args_from_cmdline = xcalloc(len_args_from_cmdline, sizeof(char)); 63 args_from_cmdline = xcalloc(len_args_from_cmdline, sizeof(char));
59 for (; optind < argc; optind++) { 64 while (argc-- > 0) {
60 if (strlen(argv[optind]) + strlen(args_from_cmdline) > 65 if (strlen(*argv) + strlen(args_from_cmdline) >
61 len_args_from_cmdline) { 66 len_args_from_cmdline) {
62 len_args_from_cmdline += strlen(argv[optind]); 67 len_args_from_cmdline += strlen(*argv);
63 args_from_cmdline = 68 args_from_cmdline =
64 xrealloc(args_from_cmdline, 69 xrealloc(args_from_cmdline,
65 len_args_from_cmdline+1); 70 len_args_from_cmdline+1);
66 } 71 }
67 strcat(args_from_cmdline, argv[optind]); 72 strcat(args_from_cmdline, *argv);
68 strcat(args_from_cmdline, " "); 73 strcat(args_from_cmdline, " ");
69 } 74 }
70 } 75 }