diff options
author | Antonio Borneo <borneo.antonio@gmail.com> | 2023-08-06 11:34:28 +0200 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2024-01-13 14:43:29 +0000 |
commit | f9ea9ce24cf4423111a7fa033f8ceff61d17aa5b (patch) | |
tree | 2e1a25c6f5a0017b1f07ba3de221dd7a317b1118 /src/helper | |
parent | 712c1244e8486bb4519ad0144a03c3c48c030214 (diff) | |
download | riscv-openocd-f9ea9ce24cf4423111a7fa033f8ceff61d17aa5b.zip riscv-openocd-f9ea9ce24cf4423111a7fa033f8ceff61d17aa5b.tar.gz riscv-openocd-f9ea9ce24cf4423111a7fa033f8ceff61d17aa5b.tar.bz2 |
helper/command: simplify exec_command()
The jimtcl interpreter guarantees that the Jim objects in argv[]
are not deallocated during the command execution. Thus, there is
no need to copy the string content of argv[].
Simplify exec_command() by inlining its two sub-functions and
dropping the strdup().
While there, add a LOG_ERROR() for out of memory.
Change-Id: I3e21ed7da50ca0bd072edbd49fca9740c81f95b0
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/8055
Tested-by: jenkins
Diffstat (limited to 'src/helper')
-rw-r--r-- | src/helper/command.c | 38 |
1 files changed, 9 insertions, 29 deletions
diff --git a/src/helper/command.c b/src/helper/command.c index f7ec0e2..8860cf8 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -154,30 +154,6 @@ static void script_debug(Jim_Interp *interp, unsigned int argc, Jim_Obj * const free(dbg); } -static void script_command_args_free(char **words, unsigned nwords) -{ - for (unsigned i = 0; i < nwords; i++) - free(words[i]); - free(words); -} - -static char **script_command_args_alloc(unsigned int argc, Jim_Obj * const *argv) -{ - char **words = malloc(argc * sizeof(char *)); - if (!words) - return NULL; - - for (unsigned int i = 0; i < argc; i++) { - const char *w = Jim_GetString(argv[i], NULL); - words[i] = strdup(w); - if (!words[i]) { - script_command_args_free(words, i); - return NULL; - } - } - return words; -} - struct command_context *current_command_context(Jim_Interp *interp) { /* grab the command context from the associated data */ @@ -898,13 +874,17 @@ static int exec_command(Jim_Interp *interp, struct command_context *cmd_ctx, return c->jim_handler(interp, argc, argv); /* use c->handler */ - unsigned int nwords = argc; - char **words = script_command_args_alloc(argc, argv); - if (!words) + const char **words = malloc(argc * sizeof(char *)); + if (!words) { + LOG_ERROR("Out of memory"); return JIM_ERR; + } - int retval = run_command(cmd_ctx, c, (const char **)words, nwords); - script_command_args_free(words, nwords); + for (int i = 0; i < argc; i++) + words[i] = Jim_GetString(argv[i], NULL); + + int retval = run_command(cmd_ctx, c, words, argc); + free(words); return command_retval_set(interp, retval); } |