diff options
Diffstat (limited to 'common/cmd_echo.c')
| -rw-r--r-- | common/cmd_echo.c | 28 | 
1 files changed, 21 insertions, 7 deletions
| diff --git a/common/cmd_echo.c b/common/cmd_echo.c index 43a6da572..1e499fb0d 100644 --- a/common/cmd_echo.c +++ b/common/cmd_echo.c @@ -30,17 +30,31 @@ int do_echo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  	int putnl = 1;  	for (i = 1; i < argc; i++) { -		char *p = argv[i], c; +		char *p = argv[i]; +		char *nls; /* new-line suppression */  		if (i > 1)  			putc(' '); -		while ((c = *p++) != '\0') { -			if (c == '\\' && *p == 'c') { -				putnl = 0; -				p++; -			} else { -				putc(c); + +		nls = strstr(p, "\\c"); +		if (nls) { +			char *prenls = p; + +			putnl = 0; +			/* +			 * be paranoid and guess that someone might +			 * say \c more than once +			 */ +			while (nls) { +				*nls = '\0'; +				puts(prenls); +				*nls = '\\'; +				prenls = nls + 2; +				nls = strstr(prenls, "\\c");  			} +			puts(prenls); +		} else { +			puts(p);  		}  	} |