diff options
author | Eric Andersen <andersen@codepoet.org> | 2000-09-24 05:12:54 +0400 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2000-09-24 05:12:54 +0400 |
commit | 9ae38386575513dfed2a7eba4eb53869d17dca2d (patch) | |
tree | 95988f4de92ec22b417d3c371e231369a8cdd4ce | |
parent | 1b1cfde1f8d66eafb1faa1b3272f9dac4c3b5b5b (diff) |
Fix xargs option parsing
-rw-r--r-- | findutils/xargs.c | 31 | ||||
-rw-r--r-- | xargs.c | 31 |
2 files changed, 36 insertions, 26 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) char traceflag = 0; int len_args_from_cmdline, len_cmd_to_be_executed, len, opt; - while ((opt = getopt(argc, argv, "t")) != EOF) { - switch (opt) { - case 't': - traceflag=1; - break; - default: - fatalError(xargs_usage); + /* Note that we do not use getopt here, since + * we only want to interpret initial options, + * not options passed to commands */ + while (--argc && **(++argv) == '-') { + while (*++(*argv)) { + switch (**argv) { + case 't': + traceflag=1; + break; + default: + fatalError(xargs_usage); + } } } /* Store the command and arguments to be executed (from the command line) */ - if (optind == argc) { + if (argc == 1) { len_args_from_cmdline = 6; args_from_cmdline = xmalloc(len_args_from_cmdline); strcat(args_from_cmdline, "echo "); } else { - opt=strlen(argv[optind]); + opt=strlen(*argv); len_args_from_cmdline = (opt > 10)? opt : 10; args_from_cmdline = xcalloc(len_args_from_cmdline, sizeof(char)); - for (; optind < argc; optind++) { - if (strlen(argv[optind]) + strlen(args_from_cmdline) > + while (argc-- > 0) { + if (strlen(*argv) + strlen(args_from_cmdline) > len_args_from_cmdline) { - len_args_from_cmdline += strlen(argv[optind]); + len_args_from_cmdline += strlen(*argv); args_from_cmdline = xrealloc(args_from_cmdline, len_args_from_cmdline+1); } - strcat(args_from_cmdline, argv[optind]); + strcat(args_from_cmdline, *argv); strcat(args_from_cmdline, " "); } } @@ -37,34 +37,39 @@ int xargs_main(int argc, char **argv) char traceflag = 0; int len_args_from_cmdline, len_cmd_to_be_executed, len, opt; - while ((opt = getopt(argc, argv, "t")) != EOF) { - switch (opt) { - case 't': - traceflag=1; - break; - default: - fatalError(xargs_usage); + /* Note that we do not use getopt here, since + * we only want to interpret initial options, + * not options passed to commands */ + while (--argc && **(++argv) == '-') { + while (*++(*argv)) { + switch (**argv) { + case 't': + traceflag=1; + break; + default: + fatalError(xargs_usage); + } } } /* Store the command and arguments to be executed (from the command line) */ - if (optind == argc) { + if (argc == 1) { len_args_from_cmdline = 6; args_from_cmdline = xmalloc(len_args_from_cmdline); strcat(args_from_cmdline, "echo "); } else { - opt=strlen(argv[optind]); + opt=strlen(*argv); len_args_from_cmdline = (opt > 10)? opt : 10; args_from_cmdline = xcalloc(len_args_from_cmdline, sizeof(char)); - for (; optind < argc; optind++) { - if (strlen(argv[optind]) + strlen(args_from_cmdline) > + while (argc-- > 0) { + if (strlen(*argv) + strlen(args_from_cmdline) > len_args_from_cmdline) { - len_args_from_cmdline += strlen(argv[optind]); + len_args_from_cmdline += strlen(*argv); args_from_cmdline = xrealloc(args_from_cmdline, len_args_from_cmdline+1); } - strcat(args_from_cmdline, argv[optind]); + strcat(args_from_cmdline, *argv); strcat(args_from_cmdline, " "); } } |