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:
		| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user