server: add server_preinit which is called before config file is parsed.
authorSpencer Oliver <ntfreak@users.sourceforge.net>
Thu, 10 Dec 2009 14:31:28 +0000 (14:31 +0000)
committerSpencer Oliver <ntfreak@users.sourceforge.net>
Fri, 11 Dec 2009 10:26:15 +0000 (10:26 +0000)
This fixes the issue under native win32 of the socket interface not being
enabled (via WSAStartup) before init is called from a script.

Signed-off-by: Spencer Oliver <ntfreak@users.sourceforge.net>
src/openocd.c
src/server/server.c
src/server/server.h

index 8cb86746bf51e61fd5f5a5b7cea4ff3d75e4d9d4..1105d2a4366a0d8c177eae42a67a4ecf307bdc6f 100644 (file)
@@ -62,7 +62,6 @@ COMMAND_HANDLER(handle_version_command)
        return ERROR_OK;
 }
 
-
 static int log_target_callback_event_handler(struct target *target, enum target_event event, void *priv)
 {
        switch (event)
@@ -255,13 +254,15 @@ int openocd_main(int argc, char *argv[])
                "http://openocd.berlios.de/doc/doxygen/bugs.html"
                "\n");
 
-
        command_context_mode(cmd_ctx, COMMAND_CONFIG);
        command_set_output_handler(cmd_ctx, configuration_output_handler, NULL);
 
        if (parse_cmdline_args(cmd_ctx, argc, argv) != ERROR_OK)
                return EXIT_FAILURE;
 
+       if (server_preinit() != ERROR_OK)
+               return EXIT_FAILURE;
+
        ret = parse_config_file(cmd_ctx);
        if (ret != ERROR_OK)
                return EXIT_FAILURE;
index 2f4bfb0043dc393da9247644d5d80b9bdbc3b563..75a6bed08be6dcb48532c4b7b10561e9031a5877 100644 (file)
@@ -487,8 +487,12 @@ void sig_handler(int sig) {
 }
 #endif
 
-int server_init(struct command_context *cmd_ctx)
+int server_preinit(void)
 {
+       /* this currently only calls WSAStartup on native win32 systems
+        * before any socket operations are performed.
+        * This is an issue if you call init in your config script */
+
 #ifdef _WIN32
        WORD wVersionRequested;
        WSADATA wsaData;
@@ -518,6 +522,11 @@ int server_init(struct command_context *cmd_ctx)
        signal(SIGABRT, sig_handler);
 #endif
 
+       return ERROR_OK;
+}
+
+int server_init(struct command_context *cmd_ctx)
+{
        int ret = tcl_init(cmd_ctx);
        if (ERROR_OK != ret)
                return ret;
index be1afbe4083d9cb8637453ed39eac5246c87bb4a..a25920ed0d6495f6a759b0ed7820aa52c618a5c8 100644 (file)
@@ -74,6 +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_preinit(void);
 int server_init(struct command_context *cmd_ctx);
 int server_quit(void);