echo: add -e option support
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
adaffb5b0c
commit
a9ff0c8e8b
|
@ -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 "
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue