[U-Boot] [PATCH v5 6/9] Create a single cmd_call() function to handle command execution
Simon Glass
sjg at chromium.org
Wed Feb 15 06:59:23 CET 2012
We should aim for a single point of entry to the commands, whichever
parser is used.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
Changes in v5:
- Move cmd_call() prototype inside existing #ifdef __ASSEMBLY__
- Tidy up function comment to bring in changes in a later patch
common/command.c | 21 +++++++++++++++++++++
common/hush.c | 9 +++------
common/main.c | 3 +--
include/command.h | 3 +++
4 files changed, 28 insertions(+), 8 deletions(-)
diff --git a/common/command.c b/common/command.c
index c5cecd3..fe29075 100644
--- a/common/command.c
+++ b/common/command.c
@@ -487,3 +487,24 @@ void fixup_cmdtable(cmd_tbl_t *cmdtp, int size)
}
}
#endif
+
+/**
+ * Call a command function. This should be the only route in U-Boot to call
+ * a command, so that we can track whether we are waiting for input or
+ * executing a command.
+ *
+ * @param cmdtp Pointer to the command to execute
+ * @param flag Some flags normally 0 (see CMD_FLAG_.. above)
+ * @param argc Number of arguments (arg 0 must be the command text)
+ * @param argv Arguments
+ * @return 0 if command succeeded, else non-zero (CMD_RET_...)
+ */
+int cmd_call(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int result;
+
+ result = (cmdtp->cmd)(cmdtp, flag, argc, argv);
+ if (result)
+ debug("Command failed, result=%d", result);
+ return result;
+}
diff --git a/common/hush.c b/common/hush.c
index e8e24d7..6cb921d 100644
--- a/common/hush.c
+++ b/common/hush.c
@@ -1679,13 +1679,10 @@ static int run_pipe_real(struct pipe *pi)
rcode = x->function(child);
#else
/* OK - call function to do the command */
-
- rcode = (cmdtp->cmd)
-(cmdtp, flag,child->argc-i,&child->argv[i]);
- if ( !cmdtp->repeatable )
+ rcode = cmd_call(cmdtp, flag, child->argc-i,
+ &child->argv[i]);
+ if (!cmdtp->repeatable)
flag_repeat = 0;
-
-
#endif
child->argv-=i; /* XXX restore hack so free() can work right */
#ifndef __U_BOOT__
diff --git a/common/main.c b/common/main.c
index 637da2b..6a3eac2 100644
--- a/common/main.c
+++ b/common/main.c
@@ -1370,9 +1370,8 @@ static int builtin_run_command(const char *cmd, int flag)
#endif
/* OK - call function to do the command */
- if ((cmdtp->cmd) (cmdtp, flag, argc, argv) != 0) {
+ if (cmd_call(cmdtp, flag, argc, argv) != 0)
rc = -1;
- }
repeatable &= cmdtp->repeatable;
diff --git a/include/command.h b/include/command.h
index 3912b80..6dc694f 100644
--- a/include/command.h
+++ b/include/command.h
@@ -112,6 +112,8 @@ static inline int bootm_maybe_autostart(cmd_tbl_t *cmdtp, const char *cmd)
#endif
extern int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
+int cmd_call(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
+
#endif /* __ASSEMBLY__ */
/*
@@ -150,4 +152,5 @@ extern int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
#if defined(CONFIG_NEEDS_MANUAL_RELOC)
void fixup_cmdtable(cmd_tbl_t *cmdtp, int size);
#endif
+
#endif /* __COMMAND_H */
--
1.7.7.3
More information about the U-Boot
mailing list