From 08589462adf3f81b480faacecb8352428212a2f5 Mon Sep 17 00:00:00 2001 From: Spencer Oliver Date: Thu, 10 Dec 2009 14:31:28 +0000 Subject: server: add server_preinit which is called before config file is parsed. 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 --- src/openocd.c | 5 +++-- src/server/server.c | 11 ++++++++++- src/server/server.h | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/openocd.c b/src/openocd.c index 8cb86746..1105d2a4 100644 --- a/src/openocd.c +++ b/src/openocd.c @@ -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; diff --git a/src/server/server.c b/src/server/server.c index 2f4bfb00..75a6bed0 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -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; diff --git a/src/server/server.h b/src/server/server.h index be1afbe4..a25920ed 100644 --- a/src/server/server.h +++ b/src/server/server.h @@ -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); -- cgit v1.2.3