xargs: fix -I SUBSTR behaviour
No binary (build failed)
—
(log yok)
| @@ -80,9 +80,11 @@ | |
| /* This is a NOEXEC applet. Be very careful! */ | |
| - | //#define dbg_msg(...) bb_error_msg(__VA_ARGS__) |
| - | #define dbg_msg(...) ((void)0) |
| - | |
| + | #if 0 |
| + | # define dbg_msg(...) bb_error_msg(__VA_ARGS__) |
| + | #else |
| + | # define dbg_msg(...) ((void)0) |
| + | #endif |
| #ifdef TEST | |
| # ifndef ENABLE_FEATURE_XARGS_SUPPORT_CONFIRMATION | |
| @@ -466,9 +468,18 @@ static char* FAST_FUNC process_stdin_with_replace(int n_max_chars, int n_max_arg | |
| while (1) { | |
| int c = getchar(); | |
| + | if (p == buf) { |
| + | if (c == EOF) |
| + | goto ret; /* last line is empty, return "" */ |
| + | if (c == G.eol_ch) |
| + | continue; /* empty line, ignore */ |
| + | /* Skip leading whitespace of each line: try |
| + | * echo -e ' \t\v1 2 3 ' | xargs -I% echo '[%]' |
| + | */ |
| + | if (ISSPACE(c)) |
| + | continue; |
| + | } |
| if (c == EOF || c == G.eol_ch) { | |
| - | if (p == buf) |
| - | goto ret; /* empty line */ |
| c = '\0'; | |
| } | |
| *p++ = c; | |
| @@ -61,4 +61,12 @@ testing "xargs -n2" \ | |
| SKIP= | |
| + | optional FEATURE_XARGS_SUPPORT_QUOTES |
| + | testing "xargs -I skips empty lines and leading whitespace" \ |
| + | "xargs -I% echo '[%]'" \ |
| + | "[2]\n[4]\n[6 6 ]\n[7]\n" \ |
| + | "" " \n2\n\n4\n\n 6 6 \n \v \t 7\n\t\n\v\n" |
| + | |
| + | SKIP= |
| + | |
| exit $FAILCOUNT | |