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

-- gerrit

commit aaabfed2457b616f15dcea6b8760e09d20d1dc65
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Sun Dec 18 22:42:18 2022 +0100

    rtt: rewrite command 'rtt channellist' as COMMAND_HANDLER
    
    This also fixes a mistake of the jim command returning ERROR_xx
    when function rtt_read_channel_info() returns error.
    While there:
    - format in a human readable way the output dictionary list, while
      preserving the structure of its TCL data;
    - add check for the number of parameters.
    
    Change-Id: Ica2b623699d3a606d3992975c836dae96f74b26d
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>

diff --git a/src/rtt/tcl.c b/src/rtt/tcl.c
index 7cbdccf567..f949aa1c94 100644
--- a/src/rtt/tcl.c
+++ b/src/rtt/tcl.c
@@ -150,17 +150,17 @@ COMMAND_HANDLER(handle_rtt_channels_command)
        return ERROR_OK;
 }
 
-static int jim_channel_list(Jim_Interp *interp, int argc,
-       Jim_Obj * const *argv)
+COMMAND_HANDLER(handle_channel_list)
 {
-       Jim_Obj *list;
-       Jim_Obj *channel_list;
        char channel_name[CHANNEL_NAME_SIZE];
        const struct rtt_control *ctrl;
        struct rtt_channel_info info;
 
+       if (CMD_ARGC != 0)
+               return ERROR_COMMAND_SYNTAX_ERROR;
+
        if (!rtt_found_cb()) {
-               Jim_SetResultFormatted(interp, "rtt: Control block not 
available");
+               command_print(CMD, "rtt: Control block not available");
                return ERROR_FAIL;
        }
 
@@ -169,81 +169,47 @@ static int jim_channel_list(Jim_Interp *interp, int argc,
        info.name = channel_name;
        info.name_length = sizeof(channel_name);
 
-       list = Jim_NewListObj(interp, NULL, 0);
-       channel_list = Jim_NewListObj(interp, NULL, 0);
+       command_print(CMD, "{");
 
        for (unsigned int i = 0; i < ctrl->num_up_channels; i++) {
-               int ret;
-               Jim_Obj *tmp;
-
-               ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_UP, &info);
-
+               int ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_UP, &info);
                if (ret != ERROR_OK)
                        return ret;
 
                if (!info.size)
                        continue;
 
-               tmp = Jim_NewListObj(interp, NULL, 0);
-
-               Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
-                       "name", -1));
-               Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
-                       info.name, -1));
-
-               Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
-                       "size", -1));
-               Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
-                       info.size));
-
-               Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
-                       "flags", -1));
-               Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
-                       info.flags));
-
-               Jim_ListAppendElement(interp, channel_list, tmp);
+               command_print(CMD,
+                       "    {\n"
+                       "        name  %s\n"
+                       "        size  0x%" PRIx32 "\n"
+                       "        flags 0x%" PRIx32 "\n"
+                       "    }",
+                       info.name, info.size, info.flags);
        }
 
-       Jim_ListAppendElement(interp, list, channel_list);
-
-       channel_list = Jim_NewListObj(interp, NULL, 0);
+       command_print(CMD, "}\n{");
 
        for (unsigned int i = 0; i < ctrl->num_down_channels; i++) {
-               int ret;
-               Jim_Obj *tmp;
-
-               ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_DOWN, &info);
-
+               int ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_DOWN, 
&info);
                if (ret != ERROR_OK)
                        return ret;
 
                if (!info.size)
                        continue;
 
-               tmp = Jim_NewListObj(interp, NULL, 0);
-
-               Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
-                       "name", -1));
-               Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
-                       info.name, -1));
-
-               Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
-                       "size", -1));
-               Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
-                       info.size));
-
-               Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
-                       "flags", -1));
-               Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
-                       info.flags));
-
-               Jim_ListAppendElement(interp, channel_list, tmp);
+               command_print(CMD,
+                       "    {\n"
+                       "        name  %s\n"
+                       "        size  0x%" PRIx32 "\n"
+                       "        flags 0x%" PRIx32 "\n"
+                       "    }",
+                       info.name, info.size, info.flags);
        }
 
-       Jim_ListAppendElement(interp, list, channel_list);
-       Jim_SetResult(interp, list);
+       command_print(CMD, "}");
 
-       return JIM_OK;
+       return ERROR_OK;
 }
 
 static const struct command_registration rtt_subcommand_handlers[] = {
@@ -284,7 +250,7 @@ static const struct command_registration 
rtt_subcommand_handlers[] = {
        },
        {
                .name = "channellist",
-               .jim_handler = jim_channel_list,
+               .handler = handle_channel_list,
                .mode = COMMAND_EXEC,
                .help = "list available channels",
                .usage = ""

-- 

Reply via email to