flash/nor/lpc2000: properly free working area used in get_lpc2000_part_id()
[fw/openocd] / src / openocd.c
index d06e2c56e5258a09d09cad9f794794defaaf8a43..4d4dc2c83d1a9dd4156dc5b80cc7063192d1dc01 100644 (file)
@@ -21,7 +21,7 @@
  *   You should have received a copy of the GNU General Public License     *
  *   along with this program; if not, write to the                         *
  *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
 #define OPENOCD_VERSION        \
        "Open On-Chip Debugger " VERSION RELSTR " (" PKGBLDDATE ")"
 
+static const char openocd_startup_tcl[] = {
+#include "startup_tcl.inc"
+0 /* Terminate with zero */
+};
+
 /* Give scripts and TELNET a way to find out what version this is */
 static int jim_version_command(Jim_Interp *interp, int argc,
        Jim_Obj * const *argv)
@@ -228,8 +233,7 @@ struct command_context *setup_command_handler(Jim_Interp *interp)
        log_init();
        LOG_DEBUG("log_init: complete");
 
-       const char *startup = openocd_startup_tcl;
-       struct command_context *cmd_ctx = command_init(startup, interp);
+       struct command_context *cmd_ctx = command_init(openocd_startup_tcl, interp);
 
        /* register subsystem commands */
        typedef int (*command_registrant_t)(struct command_context *cmd_ctx_value);
@@ -273,32 +277,36 @@ static int openocd_thread(int argc, char *argv[], struct command_context *cmd_ct
        int ret;
 
        if (parse_cmdline_args(cmd_ctx, argc, argv) != ERROR_OK)
-               return EXIT_FAILURE;
+               return ERROR_FAIL;
 
        if (server_preinit() != ERROR_OK)
-               return EXIT_FAILURE;
+               return ERROR_FAIL;
 
        ret = parse_config_file(cmd_ctx);
-       if (ret == ERROR_OK_EXIT)
+       if (ret == ERROR_COMMAND_CLOSE_CONNECTION)
                return ERROR_OK;
-       if (ret != ERROR_OK)
-               return EXIT_FAILURE;
+       else if (ret != ERROR_OK)
+               return ERROR_FAIL;
 
        ret = server_init(cmd_ctx);
        if (ERROR_OK != ret)
-               return EXIT_FAILURE;
+               return ERROR_FAIL;
 
        if (init_at_startup) {
                ret = command_run_line(cmd_ctx, "init");
                if (ERROR_OK != ret)
-                       return EXIT_FAILURE;
+                       return ERROR_FAIL;
        }
 
-       server_loop(cmd_ctx);
+       ret = server_loop(cmd_ctx);
 
-       server_quit();
+       int last_signal = server_quit();
+       if (last_signal != ERROR_OK)
+               return last_signal;
 
-       return ret;
+       if (ret != ERROR_OK)
+               return ERROR_FAIL;
+       return ERROR_OK;
 }
 
 /* normally this is the main() function entry, but if OpenOCD is linked
@@ -336,5 +344,10 @@ int openocd_main(int argc, char *argv[])
 
        adapter_quit();
 
+       if (ERROR_FAIL == ret)
+               return EXIT_FAILURE;
+       else if (ERROR_OK != ret)
+               exit_on_signal(ret);
+
        return ret;
 }