mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 14:41:31 +00:00
autocomplete: remove runtime handler install
Rather than add runtime overhead of installing completion handlers, do it statically at build time. This requires a new build time helper macro to declare a command and the completion handler at the same time. Then we convert the env related funcs over to this. This gives an opportunity to also unify the U_BOOT_CMD macros. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
882b7d726f
commit
722b061b6f
4 changed files with 30 additions and 48 deletions
|
@ -883,29 +883,32 @@ U_BOOT_CMD(
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_EDITENV)
|
#if defined(CONFIG_CMD_EDITENV)
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD_COMPLETE(
|
||||||
editenv, 2, 0, do_env_edit,
|
editenv, 2, 0, do_env_edit,
|
||||||
"edit environment variable",
|
"edit environment variable",
|
||||||
"name\n"
|
"name\n"
|
||||||
" - edit environment variable 'name'"
|
" - edit environment variable 'name'",
|
||||||
|
var_complete
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD_COMPLETE(
|
||||||
printenv, CONFIG_SYS_MAXARGS, 1, do_env_print,
|
printenv, CONFIG_SYS_MAXARGS, 1, do_env_print,
|
||||||
"print environment variables",
|
"print environment variables",
|
||||||
"\n - print values of all environment variables\n"
|
"\n - print values of all environment variables\n"
|
||||||
"printenv name ...\n"
|
"printenv name ...\n"
|
||||||
" - print value of environment variable 'name'"
|
" - print value of environment variable 'name'",
|
||||||
|
var_complete
|
||||||
);
|
);
|
||||||
|
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD_COMPLETE(
|
||||||
setenv, CONFIG_SYS_MAXARGS, 0, do_env_set,
|
setenv, CONFIG_SYS_MAXARGS, 0, do_env_set,
|
||||||
"set environment variables",
|
"set environment variables",
|
||||||
"name value ...\n"
|
"name value ...\n"
|
||||||
" - set environment variable 'name' to 'value ...'\n"
|
" - set environment variable 'name' to 'value ...'\n"
|
||||||
"setenv name\n"
|
"setenv name\n"
|
||||||
" - delete environment variable 'name'"
|
" - delete environment variable 'name'",
|
||||||
|
var_complete
|
||||||
);
|
);
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_ASKENV)
|
#if defined(CONFIG_CMD_ASKENV)
|
||||||
|
@ -926,10 +929,11 @@ U_BOOT_CMD(
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_RUN)
|
#if defined(CONFIG_CMD_RUN)
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD_COMPLETE(
|
||||||
run, CONFIG_SYS_MAXARGS, 1, do_run,
|
run, CONFIG_SYS_MAXARGS, 1, do_run,
|
||||||
"run commands in an environment variable",
|
"run commands in an environment variable",
|
||||||
"var [...]\n"
|
"var [...]\n"
|
||||||
" - run the commands in the environment variable(s) 'var'"
|
" - run the commands in the environment variable(s) 'var'",
|
||||||
|
var_complete
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -177,30 +177,6 @@ int var_complete(int argc, char * const argv[], char last_char, int maxv, char *
|
||||||
return 0;
|
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
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************************************/
|
/*************************************************************************************/
|
||||||
|
|
||||||
static int complete_cmdv(int argc, char * const argv[], char last_char, int maxv, char *cmdv[])
|
static int complete_cmdv(int argc, char * const argv[], char last_char, int maxv, char *cmdv[])
|
||||||
|
|
|
@ -336,10 +336,6 @@ void main_loop (void)
|
||||||
hush_init_var ();
|
hush_init_var ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_AUTO_COMPLETE
|
|
||||||
install_auto_complete();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_PREBOOT
|
#ifdef CONFIG_PREBOOT
|
||||||
if ((p = getenv ("preboot")) != NULL) {
|
if ((p = getenv ("preboot")) != NULL) {
|
||||||
# ifdef CONFIG_AUTOBOOT_KEYED
|
# ifdef CONFIG_AUTOBOOT_KEYED
|
||||||
|
|
|
@ -74,7 +74,7 @@ cmd_tbl_t *find_cmd_tbl (const char *cmd, cmd_tbl_t *table, int table_len);
|
||||||
extern int cmd_usage(cmd_tbl_t *cmdtp);
|
extern int cmd_usage(cmd_tbl_t *cmdtp);
|
||||||
|
|
||||||
#ifdef CONFIG_AUTO_COMPLETE
|
#ifdef CONFIG_AUTO_COMPLETE
|
||||||
extern void install_auto_complete(void);
|
extern int var_complete(int argc, char * const argv[], char last_char, int maxv, char *cmdv[]);
|
||||||
extern int cmd_auto_complete(const char *const prompt, char *buf, int *np, int *colp);
|
extern int cmd_auto_complete(const char *const prompt, char *buf, int *np, int *colp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -111,23 +111,29 @@ extern int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
|
||||||
|
|
||||||
#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))
|
#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_LONGHELP
|
#ifdef CONFIG_AUTO_COMPLETE
|
||||||
|
# define _CMD_COMPLETE(x) x,
|
||||||
|
#else
|
||||||
|
# define _CMD_COMPLETE(x)
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SYS_LONGHELP
|
||||||
|
# define _CMD_HELP(x) x,
|
||||||
|
#else
|
||||||
|
# define _CMD_HELP(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
|
#define U_BOOT_CMD_MKENT_COMPLETE(name,maxargs,rep,cmd,usage,help,comp) \
|
||||||
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}
|
{#name, maxargs, rep, cmd, usage, _CMD_HELP(help) _CMD_COMPLETE(comp)}
|
||||||
|
|
||||||
#define U_BOOT_CMD_MKENT(name,maxargs,rep,cmd,usage,help) \
|
#define U_BOOT_CMD_MKENT(name,maxargs,rep,cmd,usage,help) \
|
||||||
{#name, maxargs, rep, cmd, usage, help}
|
U_BOOT_CMD_MKENT_COMPLETE(name,maxargs,rep,cmd,usage,help,NULL)
|
||||||
|
|
||||||
#else /* no long help info */
|
#define U_BOOT_CMD_COMPLETE(name,maxargs,rep,cmd,usage,help,comp) \
|
||||||
|
cmd_tbl_t __u_boot_cmd_##name Struct_Section = \
|
||||||
|
U_BOOT_CMD_MKENT_COMPLETE(name,maxargs,rep,cmd,usage,help,comp)
|
||||||
|
|
||||||
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
|
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
|
||||||
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage}
|
U_BOOT_CMD_COMPLETE(name,maxargs,rep,cmd,usage,help,NULL)
|
||||||
|
|
||||||
#define U_BOOT_CMD_MKENT(name,maxargs,rep,cmd,usage,help) \
|
|
||||||
{#name, maxargs, rep, cmd, usage}
|
|
||||||
|
|
||||||
#endif /* CONFIG_SYS_LONGHELP */
|
|
||||||
|
|
||||||
#if defined(CONFIG_NEEDS_MANUAL_RELOC)
|
#if defined(CONFIG_NEEDS_MANUAL_RELOC)
|
||||||
void fixup_cmdtable(cmd_tbl_t *cmdtp, int size);
|
void fixup_cmdtable(cmd_tbl_t *cmdtp, int size);
|
||||||
|
|
Loading…
Add table
Reference in a new issue