diff options
author | Eric Andersen <andersen@codepoet.org> | 2000-09-24 01:12:54 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2000-09-24 01:12:54 +0000 |
commit | 9ae38386575513dfed2a7eba4eb53869d17dca2d (patch) | |
tree | 95988f4de92ec22b417d3c371e231369a8cdd4ce /findutils/xargs.c | |
parent | 1b1cfde1f8d66eafb1faa1b3272f9dac4c3b5b5b (diff) | |
download | busybox-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.c | 31 |
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 | } |