When calling openocd from a shell like this:
authorStian Skjelsad <stian@nixia.no>
Sat, 18 Feb 2012 15:10:19 +0000 (16:10 +0100)
committerFreddie Chopin <freddie.chopin@gmail.com>
Wed, 11 Jul 2012 08:16:04 +0000 (08:16 +0000)
openocd -f board/sheevaplug.cfg -c init -c exit

the calling shell will believe that openocd exited with an error due to exitval will be non-zero

This is not tested against incomming telnet

Change-Id: I63d15715a7b46f39a7de261a45039f8c3cad7a98
Signed-off-by: Stian Skjelstad <stian@nixia.no>
Reviewed-on: http://openocd.zylin.com/470
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-by: Bill Traynor <wmat@alphatroop.com>
Reviewed-by: Mathias Küster <kesmtp@freenet.de>
Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
src/helper/command.c
src/helper/log.h
src/openocd.c

index ef0afa2b56bca06e5b88e13ce4c5ca2c97b4ec2b..868d0952ece6911ca18a69c20bab9737b714d98e 100644 (file)
@@ -118,10 +118,15 @@ static void command_log_capture_finish(struct log_capture_state *state)
 static int command_retval_set(Jim_Interp *interp, int retval)
 {
        int *return_retval = Jim_GetAssocData(interp, "retval");
-       if (return_retval != NULL)
-               *return_retval = retval;
-
-       return (retval == ERROR_OK) ? JIM_OK : JIM_ERR;
+       if (retval == ERROR_COMMAND_CLOSE_CONNECTION) {
+               if (return_retval != NULL)
+                       *return_retval = 0;
+               return JIM_EXIT;
+       } else {
+               if (return_retval != NULL)
+                       *return_retval = retval;
+               return (retval == ERROR_OK) ? JIM_OK : JIM_ERR;
+       }
 }
 
 extern struct command_context *global_cmd_ctx;
@@ -671,8 +676,7 @@ int command_run_line(struct command_context *context, char *line)
                }
                return retval;
        } else if (retcode == JIM_EXIT) {
-               /* ignore.
-                * exit(Jim_GetExitCode(interp)); */
+               return ERROR_OK_EXIT;
        } else {
                const char *result;
                int reslen;
index e161a6ea2b00b66d1b36143ea9c711f946a18c2b..ad8d24795d434387d4e876a979f3c28701d5be30 100644 (file)
@@ -138,5 +138,5 @@ extern int debug_level;
  * make no assumptions about what went wrong and try to handle the problem.
  */
 #define ERROR_FAIL                                             (-4)
-
+#define ERROR_OK_EXIT                                  (-5)
 #endif /* LOG_H */
index 048ce8524809e319579a68f163cec12bdb829b0e..d06e2c56e5258a09d09cad9f794794defaaf8a43 100644 (file)
@@ -279,6 +279,8 @@ static int openocd_thread(int argc, char *argv[], struct command_context *cmd_ct
                return EXIT_FAILURE;
 
        ret = parse_config_file(cmd_ctx);
+       if (ret == ERROR_OK_EXIT)
+               return ERROR_OK;
        if (ret != ERROR_OK)
                return EXIT_FAILURE;