X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=findutils%2Fxargs.c;h=76d1d5489037a63aae2e7cc7c387ccca80287627;hb=d5fddcd57f4e692dd100121bb66adea8129fdbd6;hp=352f7e64c72fad38bd5873cff3da37b1ff80e2dd;hpb=636a1f85e89432601c59cdc3239fc867b4adf051;p=oweals%2Fbusybox.git diff --git a/findutils/xargs.c b/findutils/xargs.c index 352f7e64c..76d1d5489 100644 --- a/findutils/xargs.c +++ b/findutils/xargs.c @@ -277,7 +277,7 @@ static int xargs_ask_confirmation(void) FILE *tty_stream; int c, savec; - tty_stream = xfopen(CURRENT_TTY, "r"); + tty_stream = xfopen_for_read(CURRENT_TTY); fputs(" ?...", stderr); fflush(stderr); c = savec = getc(tty_stream); @@ -292,7 +292,7 @@ static int xargs_ask_confirmation(void) #if ENABLE_FEATURE_XARGS_SUPPORT_ZERO_TERM static xlist_t *process0_stdin(xlist_t *list_arg, - const char *eof_str ATTRIBUTE_UNUSED, size_t mc, char *buf) + const char *eof_str UNUSED_PARAM, size_t mc, char *buf) { int c; /* current char */ char *s = NULL; /* start word */ @@ -355,23 +355,25 @@ enum { OPTBIT_UPTO_NUMBER, OPTBIT_UPTO_SIZE, OPTBIT_EOF_STRING, - USE_FEATURE_XARGS_SUPPORT_CONFIRMATION(OPTBIT_INTERACTIVE,) - USE_FEATURE_XARGS_SUPPORT_TERMOPT( OPTBIT_TERMINATE ,) - USE_FEATURE_XARGS_SUPPORT_ZERO_TERM( OPTBIT_ZEROTERM ,) - - OPT_VERBOSE = 1<] */ + OPT_EOF_STRING1 = 1 << OPTBIT_EOF_STRING1, /* SUS: -E */ + OPT_INTERACTIVE = IF_FEATURE_XARGS_SUPPORT_CONFIRMATION((1 << OPTBIT_INTERACTIVE)) + 0, + OPT_TERMINATE = IF_FEATURE_XARGS_SUPPORT_TERMOPT( (1 << OPTBIT_TERMINATE )) + 0, + OPT_ZEROTERM = IF_FEATURE_XARGS_SUPPORT_ZERO_TERM( (1 << OPTBIT_ZEROTERM )) + 0, }; -#define OPTION_STR "+trn:s:e::" \ - USE_FEATURE_XARGS_SUPPORT_CONFIRMATION("p") \ - USE_FEATURE_XARGS_SUPPORT_TERMOPT( "x") \ - USE_FEATURE_XARGS_SUPPORT_ZERO_TERM( "0") +#define OPTION_STR "+trn:s:e::E:" \ + IF_FEATURE_XARGS_SUPPORT_CONFIRMATION("p") \ + IF_FEATURE_XARGS_SUPPORT_TERMOPT( "x") \ + IF_FEATURE_XARGS_SUPPORT_ZERO_TERM( "0") int xargs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int xargs_main(int argc, char **argv) @@ -385,7 +387,7 @@ int xargs_main(int argc, char **argv) int n_max_arg; size_t n_chars = 0; long orig_arg_max; - const char *eof_str = "_"; + const char *eof_str = NULL; unsigned opt; size_t n_max_chars; #if ENABLE_FEATURE_XARGS_SUPPORT_ZERO_TERM @@ -394,10 +396,16 @@ int xargs_main(int argc, char **argv) #define read_args process_stdin #endif - opt = getopt32(argv, OPTION_STR, &max_args, &max_chars, &eof_str); + opt = getopt32(argv, OPTION_STR, &max_args, &max_chars, &eof_str, &eof_str); + + /* -E ""? You may wonder why not just omit -E? + * This is used for portability: + * old xargs was using "_" as default for -E / -e */ + if ((opt & OPT_EOF_STRING1) && eof_str[0] == '\0') + eof_str = NULL; if (opt & OPT_ZEROTERM) - USE_FEATURE_XARGS_SUPPORT_ZERO_TERM(read_args = process0_stdin); + IF_FEATURE_XARGS_SUPPORT_ZERO_TERM(read_args = process0_stdin); argv += optind; argc -= optind; @@ -502,7 +510,7 @@ int xargs_main(int argc, char **argv) if (child_error > 0 && child_error != 123) { break; } - } + } /* while */ if (ENABLE_FEATURE_CLEAN_UP) free(max_chars); return child_error;