summaryrefslogtreecommitdiffstats
path: root/common/command.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:01:52 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:01:52 +0200
commite694adc6a4716fc589693eb8eb8e67bbf54e8edc (patch)
treef8af4d37d05c8f628ecc3abbe8c8d48a43794482 /common/command.c
parent2692aaeb76f66cc8fe2f1196697d9a75b06c4522 (diff)
downloadbarebox-e694adc6a4716fc589693eb8eb8e67bbf54e8edc.tar.gz
barebox-e694adc6a4716fc589693eb8eb8e67bbf54e8edc.tar.xz
svn_rev_420
- do more POSIX: - use DIR instead of struct dirent - use (struct dirent)->d_name instead of (struct dirent)->name - switch to a new layout for U_BOOT_CMD: - use C99 initializers to be able to add more fields to the command struct - add aliases for commands (needed mainly for help -> ? and test -> [ - This is not done for all commands yet, but the compiler will tell you ;)
Diffstat (limited to 'common/command.c')
-rw-r--r--common/command.c123
1 files changed, 66 insertions, 57 deletions
diff --git a/common/command.c b/common/command.c
index ef0f93a133..12f2715ef5 100644
--- a/common/command.c
+++ b/common/command.c
@@ -39,11 +39,11 @@ do_version (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 0;
}
-U_BOOT_CMD(
- version, 1, 1, do_version,
- "version - print monitor version\n",
- NULL
-);
+U_BOOT_CMD_START(version)
+ .maxargs = 1,
+ .cmd = do_version,
+ .usage = "version - print monitor version\n",
+U_BOOT_CMD_END
int
do_true (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -51,11 +51,11 @@ 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
-);
+U_BOOT_CMD_START(true)
+ .maxargs = 1,
+ .cmd = do_true,
+ .usage = "true - return 0\n",
+U_BOOT_CMD_END
int
do_false (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -63,11 +63,11 @@ do_false (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 1;
}
-U_BOOT_CMD(
- false, 1, 1, do_false,
- "false - return 1\n",
- NULL
-);
+U_BOOT_CMD_START(false)
+ .maxargs = 1,
+ .cmd = do_false,
+ .usage = "false - return 1\n",
+U_BOOT_CMD_END
#ifdef CONFIG_HUSH_PARSER
@@ -92,11 +92,11 @@ do_readline (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 0;
}
-U_BOOT_CMD(
- readline, 3, 1, do_readline,
- "readline - \n",
- NULL
-);
+U_BOOT_CMD_START(readline)
+ .maxargs = 3,
+ .cmd = do_readline,
+ .usage = "readline - \n",
+U_BOOT_CMD_END
int
do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -104,6 +104,14 @@ do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
char **ap;
int left, adv, expr, last_expr, neg, last_cmp;
+ if (*argv[0] == '[') {
+ if (*argv[argc - 1] != ']') {
+ printf("[: missing `]'\n");
+ return 1;
+ }
+ argc--;
+ }
+
/* args? */
if (argc < 3)
return 1;
@@ -211,12 +219,17 @@ do_test (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return expr;
}
-U_BOOT_CMD(
- test, CONFIG_MAXARGS, 1, do_test,
- "test - minimal test like /bin/sh\n",
+char *test_aliases[] = { "[", NULL};
+
+U_BOOT_CMD_START(test)
+ .aliases = test_aliases,
+ .maxargs = CONFIG_MAXARGS,
+ .cmd = do_test,
+ .usage = "test - minimal test like /bin/sh\n",
+ U_BOOT_CMD_HELP(
"[args..]\n"
- " - test functionality\n"
-);
+ " - test functionality\n")
+U_BOOT_CMD_END
int
do_exit (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
@@ -230,12 +243,11 @@ do_exit (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return -r - 2;
}
-U_BOOT_CMD(
- exit, 2, 1, do_exit,
- "exit - exit script\n",
- " - exit functionality\n"
-);
-
+U_BOOT_CMD_START(exit)
+ .maxargs = 1,
+ .cmd = do_exit,
+ .usage = "exit - exit script\n",
+U_BOOT_CMD_END
#endif
@@ -323,31 +335,20 @@ int do_help (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
return rcode;
}
+char *help_aliases[] = { "?", NULL};
-U_BOOT_CMD(
- help, CONFIG_MAXARGS, 1, do_help,
- "help - print online help\n",
- "[command ...]\n"
+U_BOOT_CMD_START(help)
+ .maxargs = 2,
+ .cmd = do_help,
+ .aliases = help_aliases,
+ .usage = "help - print online help\n",
+ U_BOOT_CMD_HELP(
" - show help information (for 'command')\n"
"'help' prints online help for the monitor commands.\n\n"
"Without arguments, it prints a short usage message for all commands.\n\n"
"To get detailed help information for specific commands you can type\n"
- "'help' with one or more command names as arguments.\n"
-);
-
-/* This do not ust the U_BOOT_CMD macro as ? can't be used in symbol names */
-#ifdef CONFIG_LONGHELP
-cmd_tbl_t __u_boot_cmd_question_mark Struct_Section = {
- "?", CONFIG_MAXARGS, 1, do_help,
- "? - alias for 'help'\n",
- NULL
-};
-#else
-cmd_tbl_t __u_boot_cmd_question_mark Struct_Section = {
- "?", CONFIG_MAXARGS, 1, do_help,
- "? - alias for 'help'\n"
-};
-#endif /* CONFIG_LONGHELP */
+ "'help' with one or more command names as arguments.\n")
+U_BOOT_CMD_END
#endif /* CONFIG_CMD_HELP */
@@ -358,15 +359,10 @@ cmd_tbl_t *find_cmd (const char *cmd)
{
cmd_tbl_t *cmdtp;
cmd_tbl_t *cmdtp_temp = &__u_boot_cmd_start; /*Init value */
- const char *p;
int len;
int n_found = 0;
- /*
- * Some commands allow length modifiers (like "cp.b");
- * compare command name only until first dot.
- */
- len = ((p = strchr(cmd, '.')) == NULL) ? strlen (cmd) : (p - cmd);
+ len = strlen (cmd);
for (cmdtp = &__u_boot_cmd_start;
cmdtp != &__u_boot_cmd_end;
@@ -378,6 +374,19 @@ cmd_tbl_t *find_cmd (const char *cmd)
cmdtp_temp = cmdtp; /* abbreviated command ? */
n_found++;
}
+ if (cmdtp->aliases) {
+ char **aliases = cmdtp->aliases;
+ while(*aliases) {
+ if (strncmp (cmd, *aliases, len) == 0) {
+ if (len == strlen (cmdtp->name))
+ return cmdtp; /* full match */
+
+ cmdtp_temp = cmdtp; /* abbreviated command ? */
+ n_found++;
+ }
+ aliases++;
+ }
+ }
}
if (n_found == 1) { /* exactly one match */
return cmdtp_temp;