add command private data setter/accessor
authorZachary T Welch <zw@superlucidity.net>
Sat, 28 Nov 2009 00:30:28 +0000 (16:30 -0800)
committerZachary T Welch <zw@superlucidity.net>
Sat, 28 Nov 2009 21:00:39 +0000 (13:00 -0800)
Presently, commands registration taks a static handler data pointer.
This patch adds support for commands that require a dynamic pointer,
such as those registered in a dynamic context (e.g. subcommands for a
user-created 'foo.cpu' command).  The command_set_handler_data will
update a command (group) to use a new context pointer, while the
CMD_DATA macro allows command handlers to access the value.
Jim handlers should find this value in interp->cmdPrivData.

src/helper/command.c
src/helper/command.h

index 61a791dc676a8df084b9d2d41cadf0f457878735..b2aa76b0b9e0ba00e0236f94913e975e29f35464 100644 (file)
@@ -439,6 +439,14 @@ int unregister_command(struct command_context *context,
        return ERROR_OK;
 }
 
+void command_set_handler_data(struct command *c, void *p)
+{
+       if (NULL != c->handler || NULL != c->jim_handler)
+               c->jim_handler_data = p;
+       for (struct command *cc = c->children; NULL != cc; cc = cc->next)
+               command_set_handler_data(cc, p);
+}
+
 void command_output_text(struct command_context *context, const char *data)
 {
        if (context && context->output_handler && data) {
index 84bdb71e3d6d0123622d3afdee27dfd3631480d0..2d3348468f3ca541a4e57c868e80693bdebb3df7 100644 (file)
@@ -80,6 +80,8 @@ struct command_context
        void *output_handler_priv;
 };
 
+struct command;
+
 /**
  * When run_command is called, a new instance will be created on the
  * stack, filled with the proper values, and passed by reference to the
@@ -87,6 +89,7 @@ struct command_context
  */
 struct command_invocation {
        struct command_context *ctx;
+       struct command *current;
        const char *name;
        unsigned argc;
        const char **argv;
@@ -151,6 +154,16 @@ struct command_invocation {
  * rather than accessing the variable directly.  It may be moved.
  */
 #define CMD_NAME cmd->name
+/**
+ * Use this macro to access the current command being handled,
+ * rather than accessing the variable directly.  It may be moved.
+ */
+#define CMD_CURRENT cmd->current
+/**
+ * Use this macro to access the invoked command handler's data pointer,
+ * rather than accessing the variable directly.  It may be moved.
+ */
+#define CMD_DATA CMD_CURRENT->jim_handler_data
 
 
 /// The type signature for commands' handler functions.
@@ -290,6 +303,16 @@ struct command *command_find_in_context(struct command_context *cmd_ctx,
 struct command *command_find_in_parent(struct command *parent,
                const char *name);
 
+/**
+ * Update the private command data field for a command and all descendents.
+ * This is used when creating a new heirarchy of commands that depends
+ * on obtaining a dynamically created context.  The value will be available
+ * in command handlers by using the CMD_DATA macro.
+ * @param c The command (group) whose data pointer(s) will be updated.
+ * @param p The new data pointer to use for the command or its descendents.
+ */
+void command_set_handler_data(struct command *c, void *p);
+
 void command_set_output_handler(struct command_context* context,
                command_output_handler_t output_handler, void *priv);
 

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)