diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2007-07-05 18:01:48 +0200 |
---|---|---|
committer | Sascha Hauer <sha@octopus.labnet.pengutronix.de> | 2007-07-05 18:01:48 +0200 |
commit | 4c16d48f035df64772e239a29c36438e23c706da (patch) | |
tree | c6f16567df21b3a0cc102b48147c57122fd4a07b /common/command.c | |
parent | 15edc0849bba8cc3c4faadc4bae8bb4396a53c0d (diff) | |
download | barebox-4c16d48f035df64772e239a29c36438e23c706da.tar.gz barebox-4c16d48f035df64772e239a29c36438e23c706da.tar.xz |
svn_rev_375
add readline, true, false commands
Diffstat (limited to 'common/command.c')
-rw-r--r-- | common/command.c | 83 |
1 files changed, 51 insertions, 32 deletions
diff --git a/common/command.c b/common/command.c index f8cdbaa5c2..ef0f93a133 100644 --- a/common/command.c +++ b/common/command.c @@ -27,6 +27,9 @@ #include <common.h> #include <command.h> +#include <xfuncs.h> +#include <malloc.h> +#include <environment.h> int do_version (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) @@ -42,44 +45,59 @@ U_BOOT_CMD( NULL ); -#ifdef CONFIG_CMD_ECHO +int +do_true (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + return 0; +} + +U_BOOT_CMD( + true, 1, 1, do_true, + "true - return 0\n", + NULL +); int -do_echo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +do_false (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { - int i, putnl = 1; + return 1; +} - for (i = 1; i < argc; i++) { - char *p = argv[i], c; +U_BOOT_CMD( + false, 1, 1, do_false, + "false - return 1\n", + NULL +); - if (i > 1) - putc(' '); - while ((c = *p++) != '\0') { - if (c == '\\' && *p == 'c') { - putnl = 0; - p++; - } else { - putc(c); - } - } +#ifdef CONFIG_HUSH_PARSER + +int +do_readline (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + char *buf = xmalloc(CONFIG_CBSIZE); + + if (argc < 3) { + printf ("Usage:\n%s\n", cmdtp->usage); + return 1; + } + + if (readline(argv[1], buf, CONFIG_CBSIZE) < 0) { + free(buf); + return 1; } - if (putnl) - putc('\n'); + setenv(argv[2], buf); + free(buf); + return 0; } U_BOOT_CMD( - echo, CONFIG_MAXARGS, 1, do_echo, - "echo - echo args to console\n", - "[args..]\n" - " - echo args to console; \\c suppresses newline\n" + readline, 3, 1, do_readline, + "readline - \n", + NULL ); -#endif /* CONFIG_CMD_ECHO */ - -#ifdef CONFIG_HUSH_PARSER - int do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { @@ -90,7 +108,6 @@ do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) if (argc < 3) return 1; - last_expr = 0; left = argc - 1; ap = argv + 1; if (left > 0 && strcmp(ap[0], "!") == 0) { @@ -148,6 +165,8 @@ do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) } if (adv == 3) { + ulong a = simple_strtol(ap[0], NULL, 0); + ulong b = simple_strtol(ap[2], NULL, 0); if (strcmp(ap[1], "=") == 0) expr = strcmp(ap[0], ap[2]) == 0; else if (strcmp(ap[1], "!=") == 0) @@ -157,17 +176,17 @@ do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) else if (strcmp(ap[1], "<") == 0) expr = strcmp(ap[0], ap[2]) < 0; else if (strcmp(ap[1], "-eq") == 0) - expr = simple_strtol(ap[0], NULL, 10) == simple_strtol(ap[2], NULL, 10); + expr = a == b; else if (strcmp(ap[1], "-ne") == 0) - expr = simple_strtol(ap[0], NULL, 10) != simple_strtol(ap[2], NULL, 10); + expr = a != b; else if (strcmp(ap[1], "-lt") == 0) - expr = simple_strtol(ap[0], NULL, 10) < simple_strtol(ap[2], NULL, 10); + expr = a < b; else if (strcmp(ap[1], "-le") == 0) - expr = simple_strtol(ap[0], NULL, 10) <= simple_strtol(ap[2], NULL, 10); + expr = a <= b; else if (strcmp(ap[1], "-gt") == 0) - expr = simple_strtol(ap[0], NULL, 10) > simple_strtol(ap[2], NULL, 10); + expr = a > b; else if (strcmp(ap[1], "-ge") == 0) - expr = simple_strtol(ap[0], NULL, 10) >= simple_strtol(ap[2], NULL, 10); + expr = a >= b; else { expr = 1; break; |