aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2022-09-01 17:05:42 +0000
committerWarner Losh <imp@FreeBSD.org>2023-01-24 21:49:32 +0000
commit3cb3b855b97ca8095c17d102b633374b4655aaed (patch)
tree50ab51e7720cdca98996d9464fe8014b5079dc14
parent8b46b52913674111ab4c95478e037605117b0e32 (diff)
stand: separate the command lookup from the command execution
Factor out interp_lookup_cmd to search for a command from interp_builtin_cmd. This simplifies the latter and can be used to expand lua to ask if a command exists. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D36363 (cherry picked from commit 113dfadd5c8c2b8a566bf4d0e969e1dff62c9e2f)
-rw-r--r--stand/common/interp.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/stand/common/interp.c b/stand/common/interp.c
index de5ea55eab41..227e7ad91e29 100644
--- a/stand/common/interp.c
+++ b/stand/common/interp.c
@@ -152,6 +152,19 @@ interp_emit_prompt(void)
free(pr);
}
+static struct bootblk_command *
+interp_lookup_cmd(const char *cmd)
+{
+ struct bootblk_command **cmdp;
+
+ /* search the command set for the command */
+ SET_FOREACH(cmdp, Xcommand_set) {
+ if (((*cmdp)->c_name != NULL) && !strcmp(cmd, (*cmdp)->c_name))
+ return (*cmdp);
+ }
+ return (NULL);
+}
+
/*
* Perform a builtin command
*/
@@ -159,27 +172,21 @@ int
interp_builtin_cmd(int argc, char *argv[])
{
int result;
- struct bootblk_command **cmdp;
- bootblk_cmd_t *cmd;
+ struct bootblk_command *cmd;
if (argc < 1)
- return(CMD_OK);
+ return (CMD_OK);
/* set return defaults; a successful command will override these */
command_errmsg = command_errbuf;
strcpy(command_errbuf, "no error message");
- cmd = NULL;
result = CMD_ERROR;
- /* search the command set for the command */
- SET_FOREACH(cmdp, Xcommand_set) {
- if (((*cmdp)->c_name != NULL) && !strcmp(argv[0], (*cmdp)->c_name))
- cmd = (*cmdp)->c_fn;
- }
- if (cmd != NULL) {
- result = (cmd)(argc, argv);
+ cmd = interp_lookup_cmd(argv[0]);
+ if (cmd != NULL && cmd->c_fn) {
+ result = cmd->c_fn(argc, argv);
} else {
command_errmsg = "unknown command";
}
- return(result);
+ return (result);
}