9
0
Fork 0

echo: add -e option support

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2010-03-23 15:35:39 +01:00
parent adaffb5b0c
commit a9ff0c8e8b
2 changed files with 23 additions and 2 deletions

View File

@ -118,6 +118,12 @@ config CMD_ECHO
default y
prompt "echo"
config CMD_ECHO_E
bool
depends on CMD_ECHO
select PROCESS_ESCAPE_SEQUENCE
prompt "support -e option to echo"
endmenu
menu "memory "

View File

@ -25,6 +25,7 @@
#include <fs.h>
#include <fcntl.h>
#include <errno.h>
#include <libbb.h>
static int do_echo(struct command *cmdtp, int argc, char *argv[])
{
@ -32,7 +33,10 @@ static int do_echo(struct command *cmdtp, int argc, char *argv[])
int fd = stdout, opt, newline = 1;
char *file = NULL;
int oflags = O_WRONLY | O_CREAT;
#ifdef CONFIG_CMD_ECHO_E
char str[CONFIG_CBSIZE];
int process_escape = 0;
#endif
/* We can't use getopt() here because we want to
* echo all things we don't understand.
*/
@ -62,6 +66,11 @@ static int do_echo(struct command *cmdtp, int argc, char *argv[])
goto no_optarg_out;
optind++;
break;
#ifdef CONFIG_CMD_ECHO_E
case 'e':
process_escape = 1;
break;
#endif
default:
goto exit_parse;
}
@ -80,7 +89,13 @@ exit_parse:
for (i = optind; i < argc; i++) {
if (i > optind)
fputc(fd, ' ');
fputs(fd, argv[i]);
#ifdef CONFIG_CMD_ECHO_E
if (process_escape) {
process_escape_sequence(argv[i], str, CONFIG_CBSIZE);
fputs(fd, str);
} else
#endif
fputs(fd, argv[i]);
}
if (newline)