Expose command table search for sub-commands
authorKumar Gala <galak@kernel.crashing.org>
Tue, 23 Sep 2008 15:05:02 +0000 (10:05 -0500)
committerWolfgang Denk <wd@denx.de>
Sat, 18 Oct 2008 19:54:02 +0000 (21:54 +0200)
Sub-command can benefit from using the same table and search functions
that top level commands have.  Expose this functionality by refactoring
find_cmd() and introducing find_cmd_tbl() that sub-command processing
can call.

Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
common/command.c
include/command.h

index aca57b26be5e58235498a6e4df487c437db972d4..fc9d79c7d15d6c14c12657d021e9d0ca6c2f3f17 100644 (file)
@@ -341,10 +341,10 @@ cmd_tbl_t __u_boot_cmd_question_mark Struct_Section = {
 /***************************************************************************
  * find command table entry for a command
  */
-cmd_tbl_t *find_cmd (const char *cmd)
+cmd_tbl_t *find_cmd_tbl (const char *cmd, cmd_tbl_t *table, int table_len)
 {
        cmd_tbl_t *cmdtp;
-       cmd_tbl_t *cmdtp_temp = &__u_boot_cmd_start;    /*Init value */
+       cmd_tbl_t *cmdtp_temp = table;  /*Init value */
        const char *p;
        int len;
        int n_found = 0;
@@ -355,8 +355,8 @@ cmd_tbl_t *find_cmd (const char *cmd)
         */
        len = ((p = strchr(cmd, '.')) == NULL) ? strlen (cmd) : (p - cmd);
 
-       for (cmdtp = &__u_boot_cmd_start;
-            cmdtp != &__u_boot_cmd_end;
+       for (cmdtp = table;
+            cmdtp != table + table_len;
             cmdtp++) {
                if (strncmp (cmd, cmdtp->name, len) == 0) {
                        if (len == strlen (cmdtp->name))
@@ -373,6 +373,12 @@ cmd_tbl_t *find_cmd (const char *cmd)
        return NULL;    /* not found or ambiguous command */
 }
 
+cmd_tbl_t *find_cmd (const char *cmd)
+{
+       int len = &__u_boot_cmd_end - &__u_boot_cmd_start;
+       return find_cmd_tbl(cmd, &__u_boot_cmd_start, len);
+}
+
 #ifdef CONFIG_AUTO_COMPLETE
 
 int var_complete(int argc, char *argv[], char last_char, int maxv, char *cmdv[])
index f92383d0867253cfd8250812aa672953f09630fd..78feea5c71cc0020f5421dfd37cedba2db7b0d4b 100644 (file)
@@ -62,6 +62,7 @@ extern cmd_tbl_t  __u_boot_cmd_end;
 
 /* common/command.c */
 cmd_tbl_t *find_cmd(const char *cmd);
+cmd_tbl_t *find_cmd_tbl (const char *cmd, cmd_tbl_t *table, int table_len);
 
 #ifdef CONFIG_AUTO_COMPLETE
 extern void install_auto_complete(void);
@@ -102,11 +103,17 @@ extern int cmd_get_data_size(char* arg, int default_size);
 #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
 cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}
 
+#define U_BOOT_CMD_MKENT(name,maxargs,rep,cmd,usage,help) \
+{#name, maxargs, rep, cmd, usage, help}
+
 #else  /* no long help info */
 
 #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
 cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage}
 
+#define U_BOOT_CMD_MKENT(name,maxargs,rep,cmd,usage,help) \
+{#name, maxargs, rep, cmd, usage}
+
 #endif /* CFG_LONGHELP */
 
 #endif /* __COMMAND_H */