summaryrefslogtreecommitdiffstats
path: root/common/command.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:01:48 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:01:48 +0200
commit4c16d48f035df64772e239a29c36438e23c706da (patch)
treec6f16567df21b3a0cc102b48147c57122fd4a07b /common/command.c
parent15edc0849bba8cc3c4faadc4bae8bb4396a53c0d (diff)
downloadbarebox-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.c83
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;