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:
Denis Vlasenko 2007-11-23 21:20:21 +00:00
parent cccdc4e01a
commit 5bc593ccb8
2 changed files with 16 additions and 0 deletions

View File

@ -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

View File

@ -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)
{ {