add script_command_run helper
authorZachary T Welch <zw@superlucidity.net>
Wed, 25 Nov 2009 03:51:49 +0000 (19:51 -0800)
committerZachary T Welch <zw@superlucidity.net>
Wed, 25 Nov 2009 18:29:05 +0000 (10:29 -0800)
Eliminates duplicated code in script_command and handle_unknown_command.
Fixes bug with duplicated help output generated by placeholder commands.

src/helper/command.c

index 8b29ab4ac4b41a48ce1953adffb1ec2715d7bbf0..62fb48791c771dee0cacddbb2bcc3391c2228e1b 100644 (file)
@@ -150,33 +150,41 @@ static struct command_context *current_command_context(void)
        return cmd_ctx;
 }
 
-static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
+static int script_command_run(Jim_Interp *interp,
+               int argc, Jim_Obj *const *argv, struct command *c, bool capture)
 {
-       /* the private data is stashed in the interp structure */
-
-       struct command *c = interp->cmdPrivData;
-       assert(c);
-
        target_call_timer_callbacks_now();
        LOG_USER_N("%s", ""); /* Keep GDB connection alive*/
 
-       script_debug(interp, c->name, argc, argv);
-
        unsigned nwords;
        const char **words = script_command_args_alloc(argc, argv, &nwords);
        if (NULL == words)
                return JIM_ERR;
 
-       Jim_Obj *tclOutput = command_log_capture_start(interp);
+       Jim_Obj *tclOutput = NULL;
+       if (capture)
+               tclOutput = command_log_capture_start(interp);
 
        struct command_context *cmd_ctx = current_command_context();
        int retval = run_command(cmd_ctx, c, (const char **)words, nwords);
 
-       command_log_capture_finish(interp, tclOutput);
+       if (capture)
+               command_log_capture_finish(interp, tclOutput);
+
        script_command_args_free(words, nwords);
        return command_retval_set(interp, retval);
 }
 
+static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
+{
+       /* the private data is stashed in the interp structure */
+
+       struct command *c = interp->cmdPrivData;
+       assert(c);
+       script_debug(interp, c->name, argc, argv);
+       return script_command_run(interp, argc, argv, c, true);
+}
+
 /* nice short description of source file */
 #define __THIS__FILE__ "command.c"
 
@@ -922,22 +930,7 @@ static int command_unknown(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
                return (*c->jim_handler)(interp, count, start);
        }
 
-       unsigned nwords;
-       const char **words = script_command_args_alloc(count, start, &nwords);
-       if (NULL == words)
-               return JIM_ERR;
-
-       Jim_Obj *tclOutput = command_log_capture_start(interp);
-
-       int retval = run_command(cmd_ctx, c, words, nwords);
-
-       command_log_capture_finish(interp, tclOutput);
-       script_command_args_free(words, nwords);
-
-       if (!found && ERROR_OK == retval)
-               retval = ERROR_FAIL;
-
-       return command_retval_set(interp, retval);
+       return script_command_run(interp, count, start, c, found);
 }
 
 int help_add_command(struct command_context *cmd_ctx, struct command *parent,

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)