hush: implement echo builtin
authorDenis Vlasenko <vda.linux@googlemail.com>
Fri, 23 Nov 2007 21:20:21 +0000 (21:20 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Fri, 23 Nov 2007 21:20:21 +0000 (21:20 -0000)
builtin_echo                                           -      36     +36
bltins                                               384     396     +12
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/0 up/down: 48/0)               Total: 48 bytes

shell/Config.in
shell/hush.c

index 0689b4ec274dc277c0f1211752ab88e34e7b43ca..312583e875bf9e70c8d0c4fe6004ef1fbba40797 100644 (file)
@@ -166,6 +166,7 @@ config HUSH
        select TRUE
        select FALSE
        select TEST
+       select ECHO
        help
          hush is a very small shell (just 18k) and it has fairly complete
          Bourne shell grammar.  It even handles all the normal flow control
index 912cbb5d9c3bd5c464f2a7ebeca272bcfad6707a..6bf4d1d19021cb6259ddaff061656ec8555c7991 100644 (file)
@@ -614,6 +614,7 @@ static void free_strings(char **strings)
 
 /* Function prototypes for builtins */
 static int builtin_cd(char **argv);
+static int builtin_echo(char **argv);
 static int builtin_eval(char **argv);
 static int builtin_exec(char **argv);
 static int builtin_exit(char **argv);
@@ -652,6 +653,8 @@ struct built_in_command {
 #endif
 };
 
+/* For now, echo and test are unconditionally enabled.
+ * Maybe make it configurable? */
 static const struct built_in_command bltins[] = {
        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("cd"    , builtin_cd, "Change working directory"),
 //     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("exec"  , builtin_exec, "Exec command, replacing this shell with the exec'd process"),
        BLTIN("exit"  , builtin_exit, "Exit from shell"),
@@ -841,6 +845,17 @@ static int builtin_test(char **argv)
        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 */
 static int builtin_eval(char **argv)
 {