Charles Hardin <ckhardin@gmail.com>
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 14 Jul 2008 06:34:23 +0000 (06:34 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 14 Jul 2008 06:34:23 +0000 (06:34 +0000)
This evaluates the file at the correct level for the interpreter and the
sets and all the globals are then done as expected.

added a const to find_file function to avoid typecasting

git-svn-id: svn://svn.berlios.de/openocd/trunk@806 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/helper/configuration.c
src/helper/configuration.h
src/openocd.c

index e9a13ead1bb986d5cb3911176efa5a13d56e6cb3..6c2bf474c93ea13b9f9e7ac4441e86c1183675f9 100644 (file)
@@ -55,7 +55,7 @@ void add_config_command (const char *cfg)
 }
 
 /* return full path or NULL according to search rules */
-char *find_file(char *file)
+char *find_file(const char *file)
 {
        FILE *fp = NULL;
        char **search_dirs = script_search_dirs;
index d1f537d77f4aaa43d22c400a13623d31aadc2640..e29ef7346415a35f785bb628b083edef9fd61956 100644 (file)
@@ -29,7 +29,7 @@ extern void add_config_command (const char *cfg);
 extern void add_script_search_dir (const char *dir);
 extern int configuration_output_handler(struct command_context_s *context, const char* line);
 extern FILE *open_file_from_path (char *file, char *mode);
-extern char *find_file(char *name);
+extern char *find_file(const char *name);
 int add_default_dirs(void);
 
 #endif /* CONFIGURATION_H */
index 2698b72436486b3b5aece574698b9dcd28cb2eb9..b36347cd7186a27d03cbcd0da74755cae20599c4 100644 (file)
@@ -595,7 +595,7 @@ static int Jim_Command_find(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 {
        if (argc != 2)
                return JIM_ERR;
-       char *file = (char*)Jim_GetString(argv[1], NULL);
+       const char *file = Jim_GetString(argv[1], NULL);
        char *full_path = find_file(file);
        if (full_path == NULL)
                return JIM_ERR;
@@ -615,6 +615,36 @@ static int Jim_Command_echo(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
        return JIM_OK;
 }
 
+static int Jim_Command_script(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
+{
+       int retval;
+       const char *file;
+       char *full_path;
+
+       if (argc != 2)
+       {
+               Jim_WrongNumArgs(interp, 1, argv, "file name missing");
+               return JIM_ERR;
+       }
+
+       /* Run a tcl script file */
+       file = Jim_GetString(argv[1], NULL);
+       full_path = find_file(file);
+       if (full_path == NULL)
+       {
+               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
+               Jim_AppendStrings(interp, Jim_GetResult(interp), "script: could not open file", file, NULL);
+               return JIM_ERR;
+       }
+       retval = Jim_EvalFile(interp, full_path);
+       free(full_path);
+       /* convert a return to ok */
+       if (retval == JIM_RETURN)
+               return JIM_OK;
+       return retval;
+}
+
+
 static size_t openocd_jim_fwrite(const void *_ptr, size_t size, size_t n, void *cookie)
 {
        size_t nbytes;
@@ -722,6 +752,7 @@ void initJim(void)
        Jim_CreateCommand(interp, "openocd_throw", Jim_Command_openocd_throw, NULL, NULL);
        Jim_CreateCommand(interp, "find", Jim_Command_find, NULL, NULL);
        Jim_CreateCommand(interp, "echo", Jim_Command_echo, NULL, NULL);
+       Jim_CreateCommand(interp, "script", Jim_Command_script, NULL, NULL);
        Jim_CreateCommand(interp, "mem2array", Jim_Command_mem2array, NULL, NULL );
        Jim_CreateCommand(interp, "array2mem", Jim_Command_array2mem, NULL, NULL );
 
@@ -745,15 +776,6 @@ void initJim(void)
        }
 }
 
-int handle_script_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
-       if (argc != 1)
-               return ERROR_COMMAND_SYNTAX_ERROR;
-       
-       /* Run a tcl script file */
-       return command_run_linef(cmd_ctx, "source [find {%s}]", args[0]);
-}
-
 command_context_t *setup_command_handler(void)
 {
        command_context_t *cmd_ctx;
@@ -772,7 +794,6 @@ command_context_t *setup_command_handler(void)
        tcl_register_commands(cmd_ctx); /* tcl server commands */
        log_register_commands(cmd_ctx);
        jtag_register_commands(cmd_ctx);
-       register_command(cmd_ctx, NULL, "script", handle_script_command, COMMAND_ANY, "execute commands from <file>");
        xsvf_register_commands(cmd_ctx);
        target_register_commands(cmd_ctx);
        flash_register_commands(cmd_ctx);

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)