hush: implement echo builtin
builtin_echo - 36 +36 bltins 384 396 +12 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/0 up/down: 48/0) Total: 48 bytes
This commit is contained in:
parent
cccdc4e01a
commit
5bc593ccb8
@ -166,6 +166,7 @@ config HUSH
|
|||||||
select TRUE
|
select TRUE
|
||||||
select FALSE
|
select FALSE
|
||||||
select TEST
|
select TEST
|
||||||
|
select ECHO
|
||||||
help
|
help
|
||||||
hush is a very small shell (just 18k) and it has fairly complete
|
hush is a very small shell (just 18k) and it has fairly complete
|
||||||
Bourne shell grammar. It even handles all the normal flow control
|
Bourne shell grammar. It even handles all the normal flow control
|
||||||
|
15
shell/hush.c
15
shell/hush.c
@ -614,6 +614,7 @@ static void free_strings(char **strings)
|
|||||||
|
|
||||||
/* Function prototypes for builtins */
|
/* Function prototypes for builtins */
|
||||||
static int builtin_cd(char **argv);
|
static int builtin_cd(char **argv);
|
||||||
|
static int builtin_echo(char **argv);
|
||||||
static int builtin_eval(char **argv);
|
static int builtin_eval(char **argv);
|
||||||
static int builtin_exec(char **argv);
|
static int builtin_exec(char **argv);
|
||||||
static int builtin_exit(char **argv);
|
static int builtin_exit(char **argv);
|
||||||
@ -652,6 +653,8 @@ struct built_in_command {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* For now, echo and test are unconditionally enabled.
|
||||||
|
* Maybe make it configurable? */
|
||||||
static const struct built_in_command bltins[] = {
|
static const struct built_in_command bltins[] = {
|
||||||
BLTIN("[" , builtin_test, "Test condition"),
|
BLTIN("[" , builtin_test, "Test condition"),
|
||||||
BLTIN("[[" , builtin_test, "Test condition"),
|
BLTIN("[[" , builtin_test, "Test condition"),
|
||||||
@ -661,6 +664,7 @@ static const struct built_in_command bltins[] = {
|
|||||||
// BLTIN("break" , builtin_not_written, "Exit for, while or until loop"),
|
// BLTIN("break" , builtin_not_written, "Exit for, while or until loop"),
|
||||||
BLTIN("cd" , builtin_cd, "Change working directory"),
|
BLTIN("cd" , builtin_cd, "Change working directory"),
|
||||||
// BLTIN("continue", builtin_not_written, "Continue for, while or until loop"),
|
// BLTIN("continue", builtin_not_written, "Continue for, while or until loop"),
|
||||||
|
BLTIN("echo" , builtin_echo, "Write strings to stdout"),
|
||||||
BLTIN("eval" , builtin_eval, "Construct and run shell command"),
|
BLTIN("eval" , builtin_eval, "Construct and run shell command"),
|
||||||
BLTIN("exec" , builtin_exec, "Exec command, replacing this shell with the exec'd process"),
|
BLTIN("exec" , builtin_exec, "Exec command, replacing this shell with the exec'd process"),
|
||||||
BLTIN("exit" , builtin_exit, "Exit from shell"),
|
BLTIN("exit" , builtin_exit, "Exit from shell"),
|
||||||
@ -841,6 +845,17 @@ static int builtin_test(char **argv)
|
|||||||
return test_main(argc, argv - argc);
|
return test_main(argc, argv - argc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* built-in 'test' handler */
|
||||||
|
static int builtin_echo(char **argv)
|
||||||
|
{
|
||||||
|
int argc = 0;
|
||||||
|
while (*argv) {
|
||||||
|
argc++;
|
||||||
|
argv++;
|
||||||
|
}
|
||||||
|
return bb_echo(argc, argv - argc);
|
||||||
|
}
|
||||||
|
|
||||||
/* built-in 'eval' handler */
|
/* built-in 'eval' handler */
|
||||||
static int builtin_eval(char **argv)
|
static int builtin_eval(char **argv)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user