X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=common%2Fcommand.c;h=c5cecd3bf5767c033c82286a88d56c052734f490;hb=07133f2e7b671866bcf91ef6926c187c392c7aa1;hp=0b1a3fbf9b18a15a8212252a8e0c54254321b027;hpb=ac8983bcba75576c50307b5e8dc8fb848740ee61;p=u-boot diff --git a/common/command.c b/common/command.c index 0b1a3fbf9b..c5cecd3bf5 100644 --- a/common/command.c +++ b/common/command.c @@ -27,6 +27,7 @@ #include #include +#include /* * Use puts() instead of printf() to avoid printf buffer overflow @@ -140,7 +141,7 @@ cmd_tbl_t *find_cmd (const char *cmd) return find_cmd_tbl(cmd, &__u_boot_cmd_start, len); } -int cmd_usage(cmd_tbl_t *cmdtp) +int cmd_usage(const cmd_tbl_t *cmdtp) { printf("%s - %s\n\n", cmdtp->name, cmdtp->usage); @@ -162,43 +163,18 @@ int cmd_usage(cmd_tbl_t *cmdtp) int var_complete(int argc, char * const argv[], char last_char, int maxv, char *cmdv[]) { -#if 0 /* need to reimplement */ static char tmp_buf[512]; int space; - space = last_char == '\0' || last_char == ' ' || last_char == '\t'; + space = last_char == '\0' || isblank(last_char); if (space && argc == 1) return env_complete("", maxv, cmdv, sizeof(tmp_buf), tmp_buf); if (!space && argc == 2) return env_complete(argv[1], maxv, cmdv, sizeof(tmp_buf), tmp_buf); -#endif - return 0; -} -static void install_auto_complete_handler(const char *cmd, - int (*complete)(int argc, char * const argv[], char last_char, int maxv, char *cmdv[])) -{ - cmd_tbl_t *cmdtp; - - cmdtp = find_cmd(cmd); - if (cmdtp == NULL) - return; - - cmdtp->complete = complete; -} - -void install_auto_complete(void) -{ -#if defined(CONFIG_CMD_EDITENV) - install_auto_complete_handler("editenv", var_complete); -#endif - install_auto_complete_handler("printenv", var_complete); - install_auto_complete_handler("setenv", var_complete); -#if defined(CONFIG_CMD_RUN) - install_auto_complete_handler("run", var_complete); -#endif + return 0; } /*************************************************************************************/ @@ -231,7 +207,7 @@ static int complete_cmdv(int argc, char * const argv[], char last_char, int maxv } /* more than one arg or one but the start of the next */ - if (argc > 1 || (last_char == '\0' || last_char == ' ' || last_char == '\t')) { + if (argc > 1 || (last_char == '\0' || isblank(last_char))) { cmdtp = find_cmd(argv[0]); if (cmdtp == NULL || cmdtp->complete == NULL) { cmdv[0] = NULL; @@ -282,7 +258,7 @@ static int make_argv(char *s, int argvsz, char *argv[]) while (argc < argvsz - 1) { /* skip any white space */ - while ((*s == ' ') || (*s == '\t')) + while (isblank(*s)) ++s; if (*s == '\0') /* end of s, no more args */ @@ -291,7 +267,7 @@ static int make_argv(char *s, int argvsz, char *argv[]) argv[argc++] = s; /* begin of argument string */ /* find end of string */ - while (*s && (*s != ' ') && (*s != '\t')) + while (*s && !isblank(*s)) ++s; if (*s == '\0') /* end of s, no more args */ @@ -499,6 +475,13 @@ void fixup_cmdtable(cmd_tbl_t *cmdtp, int size) addr = (ulong)(cmdtp->help) + gd->reloc_off; cmdtp->help = (char *)addr; } +#endif +#ifdef CONFIG_AUTO_COMPLETE + if (cmdtp->complete) { + addr = (ulong)(cmdtp->complete) + gd->reloc_off; + cmdtp->complete = + (int (*)(int, char * const [], char, int, char * []))addr; + } #endif cmdtp++; }