diff options
author | Johannes Schindelin | 2017-08-25 22:42:05 +0200 |
---|---|---|
committer | Denys Vlasenko | 2017-08-29 21:05:40 +0200 |
commit | f8ee849ecd42fa11da6c5f381ad83594840b3cca (patch) | |
tree | 9ba537ad3ea5aaa26395f5ab846a654ca096b3de /findutils/xargs.c | |
parent | f41ffff2dce2c08d96a11a21a01437e6354e659e (diff) | |
download | busybox-f8ee849ecd42fa11da6c5f381ad83594840b3cca.zip busybox-f8ee849ecd42fa11da6c5f381ad83594840b3cca.tar.gz |
xargs: support -a FILE
The GNU-specific option -a lets xargs read the arguments from a file
rather than from stdin.
This is particularly convenient when debugging in gdb interactively,
and it might be of more general use.
function old new delta
xargs_main 788 823 +35
packed_usage 31683 31671 -12
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'findutils/xargs.c')
-rw-r--r-- | findutils/xargs.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/findutils/xargs.c b/findutils/xargs.c index 77e01ef..acee031 100644 --- a/findutils/xargs.c +++ b/findutils/xargs.c @@ -64,6 +64,11 @@ //config: bool "Enable -P N: processes to run in parallel" //config: default y //config: depends on XARGS +//config: +//config:config FEATURE_XARGS_SUPPORT_ARGS_FILE +//config: bool "Enable -a FILE: use FILE instead of stdin" +//config: default y +//config: depends on XARGS //applet:IF_XARGS(APPLET_NOEXEC(xargs, xargs, BB_DIR_USR_BIN, BB_SUID_DROP, xargs)) @@ -517,6 +522,9 @@ static int xargs_ask_confirmation(void) //usage: IF_FEATURE_XARGS_SUPPORT_ZERO_TERM( //usage: "\n -0 Input is separated by NUL characters" //usage: ) +//usage: IF_FEATURE_XARGS_SUPPORT_ARGS_FILE( +//usage: "\n -a FILE Read from FILE instead of stdin" +//usage: ) //usage: "\n -t Print the command on stderr before execution" //usage: "\n -e[STR] STR stops input processing" //usage: "\n -n N Pass no more than N args to PROG" @@ -565,7 +573,8 @@ enum { IF_FEATURE_XARGS_SUPPORT_TERMOPT( "x") \ IF_FEATURE_XARGS_SUPPORT_ZERO_TERM( "0") \ IF_FEATURE_XARGS_SUPPORT_REPL_STR( "I:i::") \ - IF_FEATURE_XARGS_SUPPORT_PARALLEL( "P:+") + IF_FEATURE_XARGS_SUPPORT_PARALLEL( "P:+") \ + IF_FEATURE_XARGS_SUPPORT_ARGS_FILE( "a:") int xargs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int xargs_main(int argc UNUSED_PARAM, char **argv) @@ -584,6 +593,7 @@ int xargs_main(int argc UNUSED_PARAM, char **argv) #else #define read_args process_stdin #endif + IF_FEATURE_XARGS_SUPPORT_PARALLEL(char *opt_a = NULL;) INIT_G(); @@ -592,6 +602,7 @@ int xargs_main(int argc UNUSED_PARAM, char **argv) &max_args, &max_chars, &G.eof_str, &G.eof_str IF_FEATURE_XARGS_SUPPORT_REPL_STR(, &G.repl_str, &G.repl_str) IF_FEATURE_XARGS_SUPPORT_PARALLEL(, &G.max_procs) + IF_FEATURE_XARGS_SUPPORT_ARGS_FILE(, &opt_a) ); #if ENABLE_FEATURE_XARGS_SUPPORT_PARALLEL @@ -599,6 +610,11 @@ int xargs_main(int argc UNUSED_PARAM, char **argv) G.max_procs = 100; /* let's not go crazy high */ #endif +#if ENABLE_FEATURE_XARGS_SUPPORT_ARGS_FILE + if (opt_a) + xmove_fd(xopen(opt_a, O_RDONLY), 0); +#endif + /* -E ""? You may wonder why not just omit -E? * This is used for portability: * old xargs was using "_" as default for -E / -e */ |