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 default y
prompt "echo" prompt "echo"
config CMD_ECHO_E
bool
depends on CMD_ECHO
select PROCESS_ESCAPE_SEQUENCE
prompt "support -e option to echo"
endmenu endmenu
menu "memory " menu "memory "

View File

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