* [U-Boot] [PATCH] autocomplete: remove runtime handler install
@ 2010-10-20 7:52 Mike Frysinger
2010-11-28 21:02 ` Wolfgang Denk
0 siblings, 1 reply; 2+ messages in thread
From: Mike Frysinger @ 2010-10-20 7:52 UTC (permalink / raw)
To: u-boot
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>
---
common/cmd_nvedit.c | 20 ++++++++++++--------
common/command.c | 24 ------------------------
common/main.c | 4 ----
include/command.h | 30 ++++++++++++++++++------------
4 files changed, 30 insertions(+), 48 deletions(-)
diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index 3d30c32..be7a878 100644
--- a/common/cmd_nvedit.c
+++ b/common/cmd_nvedit.c
@@ -886,29 +886,32 @@ U_BOOT_CMD(
*/
#if defined(CONFIG_CMD_EDITENV)
-U_BOOT_CMD(
+U_BOOT_CMD_COMPLETE(
editenv, 2, 0, do_env_edit,
"edit environment variable",
"name\n"
- " - edit environment variable 'name'"
+ " - edit environment variable 'name'",
+ var_complete
);
#endif
-U_BOOT_CMD(
+U_BOOT_CMD_COMPLETE(
printenv, CONFIG_SYS_MAXARGS, 1, do_env_print,
"print environment variables",
"\n - print values of all environment variables\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,
"set environment variables",
"name value ...\n"
" - set environment variable 'name' to 'value ...'\n"
"setenv name\n"
- " - delete environment variable 'name'"
+ " - delete environment variable 'name'",
+ var_complete
);
#if defined(CONFIG_CMD_ASKENV)
@@ -929,10 +932,11 @@ U_BOOT_CMD(
#endif
#if defined(CONFIG_CMD_RUN)
-U_BOOT_CMD(
+U_BOOT_CMD_COMPLETE(
run, CONFIG_SYS_MAXARGS, 1, do_run,
"run commands in an environment variable",
"var [...]\n"
- " - run the commands in the environment variable(s) 'var'"
+ " - run the commands in the environment variable(s) 'var'",
+ var_complete
);
#endif
diff --git a/common/command.c b/common/command.c
index d47d719..f975701 100644
--- a/common/command.c
+++ b/common/command.c
@@ -175,30 +175,6 @@ int var_complete(int argc, char * const argv[], char last_char, int maxv, char *
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[])
diff --git a/common/main.c b/common/main.c
index 878cffd..42f4d02 100644
--- a/common/main.c
+++ b/common/main.c
@@ -336,10 +336,6 @@ void main_loop (void)
hush_init_var ();
#endif
-#ifdef CONFIG_AUTO_COMPLETE
- install_auto_complete();
-#endif
-
#ifdef CONFIG_PREBOOT
if ((p = getenv ("preboot")) != NULL) {
# ifdef CONFIG_AUTOBOOT_KEYED
diff --git a/include/command.h b/include/command.h
index 81aa019..d1a0fc0 100644
--- a/include/command.h
+++ b/include/command.h
@@ -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);
#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);
#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")))
-#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) \
-cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}
+#define U_BOOT_CMD_MKENT_COMPLETE(name,maxargs,rep,cmd,usage,help,comp) \
+ {#name, maxargs, rep, cmd, usage, _CMD_HELP(help) _CMD_COMPLETE(comp)}
#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) \
-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 /* CONFIG_SYS_LONGHELP */
+ U_BOOT_CMD_COMPLETE(name,maxargs,rep,cmd,usage,help,NULL)
#if !defined(CONFIG_RELOC_FIXUP_WORKS)
void fixup_cmdtable(cmd_tbl_t *cmdtp, int size);
--
1.7.3.1
^ permalink raw reply related [flat|nested] 2+ messages in thread* [U-Boot] [PATCH] autocomplete: remove runtime handler install
2010-10-20 7:52 [U-Boot] [PATCH] autocomplete: remove runtime handler install Mike Frysinger
@ 2010-11-28 21:02 ` Wolfgang Denk
0 siblings, 0 replies; 2+ messages in thread
From: Wolfgang Denk @ 2010-11-28 21:02 UTC (permalink / raw)
To: u-boot
Dear Mike Frysinger,
In message <1287561159-9517-1-git-send-email-vapier@gentoo.org> you wrote:
> 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>
> ---
> common/cmd_nvedit.c | 20 ++++++++++++--------
> common/command.c | 24 ------------------------
> common/main.c | 4 ----
> include/command.h | 30 ++++++++++++++++++------------
> 4 files changed, 30 insertions(+), 48 deletions(-)
Applied to "next" branch, thanks.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"In Christianity neither morality nor religion come into contact with
reality at any point." - Friedrich Nietzsche
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-11-28 21:02 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-20 7:52 [U-Boot] [PATCH] autocomplete: remove runtime handler install Mike Frysinger
2010-11-28 21:02 ` Wolfgang Denk
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.