This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/8055

-- gerrit

commit 633c27db769179bf7ecc89393d8930eb0f4fb843
Author: Antonio Borneo <antonio.bor...@foss.st.com>
Date:   Sun Aug 6 11:34:28 2023 +0200

    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 <antonio.bor...@foss.st.com>

diff --git a/src/helper/command.c b/src/helper/command.c
index f7ec0e21fa..8860cf81fd 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);
 }
 

-- 

Reply via email to