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/+/8584

-- gerrit

commit 8179b873f94b6f2b79d83eb5c0c42c0974e458b6
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Sat Dec 2 16:14:32 2023 +0100

    target: rewrite command 'set_reg' as COMMAND_HANDLER
    
    Drop the use of Jim dictionary and simply handle it as a list.
    This has the drawback that repeated registers will be written at
    each repetition.
    
    Change-Id: I8e6e2f834a129ff1f6ea8f4c276fedf75cf40c39
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>

diff --git a/src/target/target.c b/src/target/target.c
index de6d89429b..44ff740a69 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -4754,38 +4754,27 @@ COMMAND_HANDLER(handle_target_get_reg)
        return ERROR_OK;
 }
 
-COMMAND_HANDLER(handle_set_reg_command)
+COMMAND_HANDLER(handle_target_set_reg)
 {
        if (CMD_ARGC != 1)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
-       int tmp;
-#if JIM_VERSION >= 80
-       Jim_Obj **dict = Jim_DictPairs(CMD_CTX->interp, CMD_JIMTCL_ARGV[0], 
&tmp);
-
-       if (!dict)
-               return ERROR_FAIL;
-#else
-       Jim_Obj **dict;
-       int ret = Jim_DictPairs(CMD_CTX->interp, CMD_JIMTCL_ARGV[0], &dict, 
&tmp);
-
-       if (ret != JIM_OK)
-               return ERROR_FAIL;
-#endif
-
-       const unsigned int length = tmp;
+       const unsigned int length = Jim_ListLength(CMD_CTX->interp, 
CMD_JIMTCL_ARGV[0]);
+       if (length % 2) {
+               command_print(CMD, "missing value");
+               return ERROR_COMMAND_ARGUMENT_INVALID;
+       }
 
        const struct target *target = get_current_target(CMD_CTX);
-       assert(target);
 
        for (unsigned int i = 0; i < length; i += 2) {
-               const char *reg_name = Jim_String(dict[i]);
-               const char *reg_value = Jim_String(dict[i + 1]);
+               const char *reg_name = 
Jim_String(Jim_ListGetIndex(CMD_CTX->interp, CMD_JIMTCL_ARGV[0], i));
+               const char *reg_value = 
Jim_String(Jim_ListGetIndex(CMD_CTX->interp, CMD_JIMTCL_ARGV[0], i + 1));
                struct reg *reg = register_get_by_name(target->reg_cache, 
reg_name, false);
 
                if (!reg || !reg->exist) {
                        command_print(CMD, "unknown register '%s'", reg_name);
-                       return ERROR_FAIL;
+                       return ERROR_COMMAND_ARGUMENT_INVALID;
                }
 
                uint8_t *buf = malloc(DIV_ROUND_UP(reg->size, 8));
@@ -5550,7 +5539,7 @@ static const struct command_registration 
target_instance_command_handlers[] = {
        {
                .name = "set_reg",
                .mode = COMMAND_EXEC,
-               .handler = handle_set_reg_command,
+               .handler = handle_target_set_reg,
                .help = "Set target register values",
                .usage = "dict",
        },
@@ -6685,7 +6674,7 @@ static const struct command_registration 
target_exec_command_handlers[] = {
        {
                .name = "set_reg",
                .mode = COMMAND_EXEC,
-               .handler = handle_set_reg_command,
+               .handler = handle_target_set_reg,
                .help = "Set target register values",
                .usage = "dict",
        },

-- 

Reply via email to