do not extern 'interp' from command.c
authorZachary T Welch <zw@superlucidity.net>
Mon, 30 Nov 2009 02:27:45 +0000 (18:27 -0800)
committerZachary T Welch <zw@superlucidity.net>
Tue, 1 Dec 2009 00:29:34 +0000 (16:29 -0800)
Adds 'interp' field to command_context, chasing the few remaining
references to the global variable outside of the command module.

src/helper/command.c
src/helper/command.h
src/jtag/core.c
src/openocd.c
src/server/httpd.c
src/server/server.c
src/server/server.h
src/server/tcl_server.c
src/server/tcl_server.h
src/target/target.c
src/target/target.h

index 319f0810d6169dbfe3ec9cef67279675cd0cf749..5df4a4536f5293c11ac155b8abc9eb4c6b8b9e2f 100644 (file)
@@ -1257,7 +1257,7 @@ struct command_context* command_init(const char *startup_tcl)
 #if !BUILD_ECOSBOARD
        Jim_InitEmbedded();
        /* Create an interpreter */
-       interp = Jim_CreateInterp();
+       interp = context->interp = Jim_CreateInterp();
        /* Add all the Jim core commands */
        Jim_RegisterCoreCommands(interp);
 #endif
index 07235961b1ddc236f215432864bee3d1755c29b7..f27364eaf6de2b2aaa80a7657ff569ee4b134b1a 100644 (file)
@@ -59,6 +59,7 @@ typedef int (*command_output_handler_t)(struct command_context *context,
 
 struct command_context
 {
+       Jim_Interp *interp;
        enum command_mode mode;
        struct command *commands;
        int current_target;
@@ -359,8 +360,6 @@ void process_jim_events(void);
 #define                ERROR_COMMAND_ARGUMENT_OVERFLOW         (-604)
 #define                ERROR_COMMAND_ARGUMENT_UNDERFLOW        (-605)
 
-extern Jim_Interp *interp;
-
 int parse_ulong(const char *str, unsigned long *ul);
 int parse_ullong(const char *str, unsigned long long *ul);
 
index 211b9d5ad9e70ff1d41fa05a1259cc52f76d8e47..9230cc2bc5ef83559bda68d4747b4d4e22a7d8c5 100644 (file)
@@ -1535,7 +1535,7 @@ int jtag_init(struct command_context *cmd_ctx)
        if ((retval = jtag_execute_queue()) != ERROR_OK)
                return retval;
 
-       if (Jim_Eval_Named(interp, "jtag_init", __FILE__, __LINE__) != JIM_OK)
+       if (Jim_Eval_Named(cmd_ctx->interp, "jtag_init", __FILE__, __LINE__) != JIM_OK)
                return ERROR_FAIL;
 
        return ERROR_OK;
index 2a65b4d87a198f93306ffe77810d2ec53ae77a87..1be209ad6a9b5b742d77c70feeaa491ceddac0af 100644 (file)
@@ -277,7 +277,7 @@ int openocd_main(int argc, char *argv[])
                return EXIT_FAILURE;
 #endif
 
-       ret = server_init();
+       ret = server_init(cmd_ctx);
        if (ERROR_OK != ret)
                return EXIT_FAILURE;
 
index 9fa58790f1f79db0fe5b769345a929a3da769c4e..b346ca2ee68663eb6fc0a5310fcbce3517d31125 100644 (file)
@@ -180,6 +180,7 @@ httpd_Jim_Command_formfetch(Jim_Interp *interp,
 struct httpd_request
 {
        int post;
+       Jim_Interp *interp;
        struct MHD_PostProcessor *postprocessor;
 
        //Jim_Obj *dict;
@@ -208,7 +209,8 @@ static void request_completed(void *cls, struct MHD_Connection *connection,
 }
 
 /* append to said key in dictionary */
-static void append_key(struct httpd_request *r, const char *key,
+static void append_key(Jim_Interp *interp,
+               struct httpd_request *r, const char *key,
                const char *data, size_t off, size_t size)
 {
        Jim_Obj *keyObj = Jim_NewStringObj(interp, key, -1);
@@ -259,7 +261,7 @@ static int iterate_post(void *con_cls, enum MHD_ValueKind kind,
 {
        struct httpd_request *r = (struct httpd_request*) con_cls;
 
-       append_key(r, key, data, off, size);
+       append_key(r->interp, r, key, data, off, size);
 
        return MHD_YES;
 }
@@ -268,12 +270,13 @@ static int record_arg(void *cls, enum MHD_ValueKind kind, const char *key,
                const char *value)
 {
        struct httpd_request *r = (struct httpd_request*) cls;
-       append_key(r, key, value, 0, strlen(value));
+       append_key(r->interp, r, key, value, 0, strlen(value));
        return MHD_YES;
 }
 
 
-static int handle_request(struct MHD_Connection * connection, const char * url)
+static int handle_request(Jim_Interp *interp,
+               struct MHD_Connection * connection, const char * url)
 {
        struct MHD_Response * response;
 
@@ -358,6 +361,7 @@ static int ahc_echo_inner(void * cls, struct MHD_Connection * connection,
                const char * url, const char * method, const char * version,
                const char * upload_data, size_t * upload_data_size, void ** ptr)
 {
+       Jim_Interp *interp = (Jim_Interp *)cls;
        int post = 0;
 
        if (0 == strcmp(method, "POST"))
@@ -384,7 +388,7 @@ static int ahc_echo_inner(void * cls, struct MHD_Connection * connection,
                memset(*ptr, 0, sizeof(struct httpd_request));
 
                r = (struct httpd_request *) *ptr;
-
+               r->interp = interp;
                r->post = post;
                Jim_SetVariableStr(interp, "httppostdata", Jim_NewDictObj(interp, NULL, 0));
 
@@ -437,7 +441,7 @@ static int ahc_echo_inner(void * cls, struct MHD_Connection * connection,
                url="index.tcl";
 
        const char *file_name = alloc_printf("%s/%s", httpd_dir, url);
-       int result = handle_request(connection, file_name);
+       int result = handle_request(interp, connection, file_name);
        free((void *)file_name);
        return result;
 }
@@ -487,7 +491,7 @@ int httpd_start(struct command_context *cmd_ctx)
        int port = 8888;
        LOG_USER("Launching httpd server on port %d", port);
        d = MHD_start_daemon(MHD_USE_SELECT_INTERNALLY, port, NULL, NULL,
-                       &ahc_echo, NULL, /* could be data for handler, but we only have a single handler, use global variables instead */
+                       &ahc_echo, cmd_ctx->interp,
                        MHD_OPTION_NOTIFY_COMPLETED, request_completed, NULL, /* Closure... what's that??? */
                        MHD_OPTION_END);
        if (d == NULL)
index 256c590da082b1174cefc26a0813fbbfe3c18392..a02d4a5c3e4b8b4979d46ff6cf909657c82cdb9d 100644 (file)
@@ -487,7 +487,7 @@ void sig_handler(int sig) {
 }
 #endif
 
-int server_init(void)
+int server_init(struct command_context *cmd_ctx)
 {
 #ifdef _WIN32
        WORD wVersionRequested;
@@ -518,7 +518,7 @@ int server_init(void)
        signal(SIGABRT, sig_handler);
 #endif
 
-       int ret = tcl_init();
+       int ret = tcl_init(cmd_ctx);
        if (ERROR_OK != ret)
                return ret;
 
index 5e862815bb1eadd465b4647e50b1df355f557747..173de9513bf0d7e6aaf3e85919c8c436780fbd9c 100644 (file)
@@ -74,7 +74,7 @@ int add_service(char *name, enum connection_type type, unsigned short port,
                input_handler_t in_handler, connection_closed_handler_t close_handler,
                void *priv);
 
-int server_init(void);
+int server_init(struct command_context *cmd_ctx);
 int server_quit(void);
 
 int server_loop(struct command_context *command_context);
index 22469a4f37144bac3d8fcce0238b2f1f9129d018..082476861b5e3999f3216570fa9dfc1a942f3075 100644 (file)
@@ -81,6 +81,7 @@ static int tcl_new_connection(struct connection *connection)
 
 static int tcl_input(struct connection *connection)
 {
+       Jim_Interp *interp = (Jim_Interp *)connection->priv;
        int retval;
        int i;
        ssize_t rlen;
@@ -156,7 +157,7 @@ static int tcl_closed(struct connection *connection)
        return ERROR_OK;
 }
 
-int tcl_init(void)
+int tcl_init(struct command_context *cmd_ctx)
 {
        int retval;
 
@@ -166,7 +167,9 @@ int tcl_init(void)
                return ERROR_OK;
        }
 
-       retval = add_service("tcl", CONNECTION_TCP, tcl_port, 1, tcl_new_connection, tcl_input, tcl_closed, NULL);
+       retval = add_service("tcl", CONNECTION_TCP, tcl_port, 1,
+                       &tcl_new_connection, &tcl_input,
+                       &tcl_closed, cmd_ctx->interp);
        return retval;
 }
 
index 1f6ba62e07d42efb007c9a67e91a7a450ad2159c..e0d7b16662502c6fe8743a18324b1d28b4cf999a 100644 (file)
@@ -22,7 +22,7 @@
 
 #include "server.h"
 
-int tcl_init(void);
+int tcl_init(struct command_context *cmd_ctx);
 int tcl_register_commands(struct command_context *cmd_ctx);
 
 #endif /* _TCL_SERVER_H_ */
index 4297258246ec0fb103746b96be6c8ff938073b9c..31734b8f1bb30db61142ebfb1009b43f87118068 100644 (file)
@@ -449,12 +449,12 @@ int target_process_reset(struct command_context *cmd_ctx, enum target_reset_mode
        jtag_poll_set_enabled(false);
 
        sprintf(buf, "ocd_process_reset %s", n->name);
-       retval = Jim_Eval(interp, buf);
+       retval = Jim_Eval(cmd_ctx->interp, buf);
 
        jtag_poll_set_enabled(save_poll);
 
        if (retval != JIM_OK) {
-               Jim_PrintErrorMessage(interp);
+               Jim_PrintErrorMessage(cmd_ctx->interp);
                return ERROR_FAIL;
        }
 
@@ -759,6 +759,8 @@ err_write_phys_memory(struct target *target, uint32_t address,
        return ERROR_FAIL;
 }
 
+static int handle_target(void *priv);
+
 int target_init(struct command_context *cmd_ctx)
 {
        struct target *target;
@@ -876,7 +878,7 @@ int target_init(struct command_context *cmd_ctx)
        {
                if ((retval = target_register_user_commands(cmd_ctx)) != ERROR_OK)
                        return retval;
-               if ((retval = target_register_timer_callback(handle_target, 100, 1, NULL)) != ERROR_OK)
+               if ((retval = target_register_timer_callback(&handle_target, 100, 1, cmd_ctx->interp)) != ERROR_OK)
                        return retval;
        }
 
@@ -1796,8 +1798,9 @@ static void target_call_event_callbacks_all(enum target_event e) {
 }
 
 /* process target state changes */
-int handle_target(void *priv)
+static int handle_target(void *priv)
 {
+       Jim_Interp *interp = (Jim_Interp *)priv;
        int retval = ERROR_OK;
 
        /* we do not want to recurse here... */
index af4727ce4046a056dc4d43cd6c5a12326401ffd8..3e307142fa3ef01fd428642db3ea61e83c35e0db 100644 (file)
@@ -251,7 +251,6 @@ int target_register_commands(struct command_context *cmd_ctx);
 int target_register_user_commands(struct command_context *cmd_ctx);
 int target_init(struct command_context *cmd_ctx);
 int target_examine(void);
-int handle_target(void *priv);
 int target_process_reset(struct command_context *cmd_ctx,
                enum target_reset_mode reset_mode);
 

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)