xargs: fix -I SUBSTR behaviour
function old new delta process_stdin_with_replace 165 204 +39 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
d4dd48f294
commit
bd202a5ec1
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user