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 <ntfreak@users.sourceforge.net>
__archive__
Spencer Oliver 2009-12-10 14:31:28 +00:00
parent 6b9c14e908
commit 08589462ad
3 changed files with 14 additions and 3 deletions

View File

@ -62,7 +62,6 @@ COMMAND_HANDLER(handle_version_command)
return ERROR_OK; return ERROR_OK;
} }
static int log_target_callback_event_handler(struct target *target, enum target_event event, void *priv) static int log_target_callback_event_handler(struct target *target, enum target_event event, void *priv)
{ {
switch (event) switch (event)
@ -255,13 +254,15 @@ int openocd_main(int argc, char *argv[])
"http://openocd.berlios.de/doc/doxygen/bugs.html" "http://openocd.berlios.de/doc/doxygen/bugs.html"
"\n"); "\n");
command_context_mode(cmd_ctx, COMMAND_CONFIG); command_context_mode(cmd_ctx, COMMAND_CONFIG);
command_set_output_handler(cmd_ctx, configuration_output_handler, NULL); command_set_output_handler(cmd_ctx, configuration_output_handler, NULL);
if (parse_cmdline_args(cmd_ctx, argc, argv) != ERROR_OK) if (parse_cmdline_args(cmd_ctx, argc, argv) != ERROR_OK)
return EXIT_FAILURE; return EXIT_FAILURE;
if (server_preinit() != ERROR_OK)
return EXIT_FAILURE;
ret = parse_config_file(cmd_ctx); ret = parse_config_file(cmd_ctx);
if (ret != ERROR_OK) if (ret != ERROR_OK)
return EXIT_FAILURE; return EXIT_FAILURE;

View File

@ -487,8 +487,12 @@ void sig_handler(int sig) {
} }
#endif #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 #ifdef _WIN32
WORD wVersionRequested; WORD wVersionRequested;
WSADATA wsaData; WSADATA wsaData;
@ -518,6 +522,11 @@ int server_init(struct command_context *cmd_ctx)
signal(SIGABRT, sig_handler); signal(SIGABRT, sig_handler);
#endif #endif
return ERROR_OK;
}
int server_init(struct command_context *cmd_ctx)
{
int ret = tcl_init(cmd_ctx); int ret = tcl_init(cmd_ctx);
if (ERROR_OK != ret) if (ERROR_OK != ret)
return ret; return ret;

View 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, input_handler_t in_handler, connection_closed_handler_t close_handler,
void *priv); void *priv);
int server_preinit(void);
int server_init(struct command_context *cmd_ctx); int server_init(struct command_context *cmd_ctx);
int server_quit(void); int server_quit(void);