summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSpencer Oliver <ntfreak@users.sourceforge.net>2009-12-10 14:31:28 +0000
committerSpencer Oliver <ntfreak@users.sourceforge.net>2009-12-11 10:26:15 +0000
commit08589462adf3f81b480faacecb8352428212a2f5 (patch)
tree89d250156b25f36e5aa4d5d45246ef79e08738fd /src
parent6b9c14e9085b5620c20e9cadffe1f5e64f09a0c6 (diff)
downloadopenocd+libswd-08589462adf3f81b480faacecb8352428212a2f5.tar.gz
openocd+libswd-08589462adf3f81b480faacecb8352428212a2f5.tar.bz2
openocd+libswd-08589462adf3f81b480faacecb8352428212a2f5.tar.xz
openocd+libswd-08589462adf3f81b480faacecb8352428212a2f5.zip
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>
Diffstat (limited to 'src')
-rw-r--r--src/openocd.c5
-rw-r--r--src/server/server.c11
-rw-r--r--src/server/server.h1
3 files changed, 14 insertions, 3 deletions
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);