From 0def65a9df6d9a295c064cba58af229b326f39fe Mon Sep 17 00:00:00 2001 From: pk910 Date: Wed, 15 Feb 2012 20:48:35 +0100 Subject: [PATCH] fixed WIN32 compatibility --- Makefile.am | 20 +++++++++++++------- configure.ac | 10 ++++------ src/ConfigParser.c | 8 +++++++- src/DBHelper.c | 2 +- src/QServer.c | 4 ++++ src/main.c | 9 +++++---- src/modules.c | 5 ++++- src/modules.h | 1 + src/overall.h | 5 +++++ src/signal.c | 6 +++++- 10 files changed, 49 insertions(+), 21 deletions(-) diff --git a/Makefile.am b/Makefile.am index 97f61f7..fc146c7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -11,11 +11,13 @@ noinst_LTLIBRARIES = libDummyServ.la libfuncmds.la libglobalcmd.la libNeonHelp.l libDummyServ_la_SOURCES = src/modules/DummyServ.mod/bot_DummyServ.c \ src/modules/DummyServ.mod/module.c -libDummyServ_la_LDFLAGS = -module -rpath /nowhere -avoid-version +libDummyServ_la_LDFLAGS = -module -rpath /nowhere -avoid-version -no-undefined +libDummyServ_la_LIBADD = $(MYSQL_LIBS) libfuncmds_la_SOURCES = src/modules/funcmd.mod/cmd_funcmds.c \ src/modules/funcmd.mod/module.c -libfuncmds_la_LDFLAGS = -module -rpath /nowhere -avoid-version +libfuncmds_la_LDFLAGS = -module -rpath /nowhere -avoid-version -no-undefined +libfuncmds_la_LIBADD = $(MYSQL_LIBS) libglobalcmd_la_SOURCES = src/modules/global.mod/cmd_global.c \ src/modules/global.mod/cmd_global_bind.c \ @@ -47,7 +49,8 @@ libglobalcmd_la_SOURCES = src/modules/global.mod/cmd_global.c \ src/modules/global.mod/cmd_global_meminfo.c \ src/modules/global.mod/cmd_global_extscript.c \ src/modules/global.mod/module.c -libglobalcmd_la_LDFLAGS = -module -rpath /nowhere -avoid-version +libglobalcmd_la_LDFLAGS = -module -rpath /nowhere -avoid-version -no-undefined +libglobalcmd_la_LIBADD = $(MYSQL_LIBS) libNeonHelp_la_SOURCES = src/modules/NeonHelp.mod/bot_NeonHelp.c \ src/modules/NeonHelp.mod/cmd_neonhelp.c \ @@ -56,7 +59,8 @@ libNeonHelp_la_SOURCES = src/modules/NeonHelp.mod/bot_NeonHelp.c \ src/modules/NeonHelp.mod/cmd_neonhelp_requests.c \ src/modules/NeonHelp.mod/cmd_neonhelp_stats.c \ src/modules/NeonHelp.mod/module.c -libNeonHelp_la_LDFLAGS = -module -rpath /nowhere -avoid-version +libNeonHelp_la_LDFLAGS = -module -rpath /nowhere -avoid-version -no-undefined +libNeonHelp_la_LIBADD = $(MYSQL_LIBS) libNeonServ_la_SOURCES = src/modules/NeonServ.mod/bot_NeonServ.c \ src/modules/NeonServ.mod/cmd_neonserv.c \ @@ -128,13 +132,15 @@ libNeonServ_la_SOURCES = src/modules/NeonServ.mod/bot_NeonServ.c \ src/modules/NeonServ.mod/cmd_neonserv_halfopall.c \ src/modules/NeonServ.mod/cmd_neonserv_dehalfopall.c \ src/modules/NeonServ.mod/module.c -libNeonServ_la_LDFLAGS = -module -rpath /nowhere -avoid-version +libNeonServ_la_LDFLAGS = -module -rpath /nowhere -avoid-version -no-undefined +libNeonServ_la_LIBADD = $(MYSQL_LIBS) libNeonSpam_la_SOURCES = src/modules/NeonSpam.mod/bot_NeonSpam.c \ src/modules/NeonSpam.mod/cmd_neonspam.c \ src/modules/NeonSpam.mod/cmd_neonspam_set.c \ src/modules/NeonSpam.mod/module.c -libNeonSpam_la_LDFLAGS = -module -rpath /nowhere -avoid-version +libNeonSpam_la_LDFLAGS = -module -rpath /nowhere -avoid-version -no-undefined +libNeonSpam_la_LIBADD = $(MYSQL_LIBS) neonserv_SOURCES = src/version.c \ src/EventLogger.c \ @@ -166,7 +172,7 @@ neonserv_SOURCES = src/version.c \ src/module_commands.c \ src/memoryDebug.c -neonserv_LDADD = $(MYSQL_LIBS) $(WINSOCK_LIBS) -ldl +neonserv_LDADD = $(MYSQL_LIBS) $(SYSTEM_LIBS) install-exec-local: $(INSTALL) -d -m 755 $(prefix) diff --git a/configure.ac b/configure.ac index e75bc48..ad949f6 100644 --- a/configure.ac +++ b/configure.ac @@ -30,9 +30,9 @@ AC_SUBST([MYSQL_LIBS]) AC_ARG_WITH([winsock], [AS_HELP_STRING([--with-winsock], [use winsock (WIN32 systems)])], - [WINSOCK_LIBS='-lws2_32'], - [WINSOCK_LIBS='']) -AC_SUBST([WINSOCK_LIBS]) + [SYSTEM_LIBS='-lws2_32'], + [SYSTEM_LIBS='-ldl']) +AC_SUBST([SYSTEM_LIBS]) do_have_ssl="no"; AC_CHECK_LIB(ssl, SSL_read, [ @@ -88,7 +88,5 @@ AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h stdlib.h string.h sys/socket. AC_FUNC_MALLOC AC_CHECK_FUNCS([gethostbyname memset select socket strchr strdup strstr]) -MY_SUBDIRS="src" -AC_SUBST(MY_SUBDIRS) -AC_CONFIG_FILES(Makefile src/Makefile src/modules/Makefile) +AC_CONFIG_FILES(Makefile) AC_OUTPUT \ No newline at end of file diff --git a/src/ConfigParser.c b/src/ConfigParser.c index bbf4791..41fdc9c 100644 --- a/src/ConfigParser.c +++ b/src/ConfigParser.c @@ -156,9 +156,15 @@ static char *parse_config_recursive(struct ConfigEntry *centry, char *buffer, in } if(flags & PARSER_FLAG_COMMAND) { int found_command = 0; + char *tmp_buffer; switch(*buffer) { case '/': - buffer = strstr(buffer, "\n"); + tmp_buffer = buffer; + buffer = strchr(buffer, '\r'); + if(!buffer) + buffer = strchr(tmp_buffer, '\n'); + if(!buffer) + buffer = tmp_buffer + strlen(tmp_buffer)-1; found_command = 1; break; case '*': diff --git a/src/DBHelper.c b/src/DBHelper.c index 2003715..56bd924 100644 --- a/src/DBHelper.c +++ b/src/DBHelper.c @@ -314,7 +314,7 @@ void deleteUser(int userid) { //unregister channel printf_mysql_query("SELECT `botid`, `channel_name` FROM `bot_channels` LEFT JOIN `channels` ON `chanid` = `channel_id` WHERE `chanid` = '%s' AND `suspended` = '0'", row[1]); res2 = mysql_use(); - while((row2 = mysql_fetch_row(res))) { + while((row2 = mysql_fetch_row(res2))) { struct ClientSocket *bot; int clientid = atoi(row2[0]); for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) { diff --git a/src/QServer.c b/src/QServer.c index 795650b..1f0d435 100644 --- a/src/QServer.c +++ b/src/QServer.c @@ -205,7 +205,11 @@ void qserver_loop() { if(FD_ISSET(server_sockfd, &fds)) { //new connection struct sockaddr_in cli_addr; + #ifdef WIN32 + int clilen; + #else socklen_t clilen; + #endif client = malloc(sizeof(*client)); clilen = sizeof(cli_addr); client->sock = accept(server_sockfd, (struct sockaddr *) &cli_addr, &clilen); diff --git a/src/main.c b/src/main.c index 8262b4b..fbf9ed5 100644 --- a/src/main.c +++ b/src/main.c @@ -192,10 +192,15 @@ int main(int argc, char *argv[]) { break; } } + #ifndef WIN32 if(geteuid() == 0 || getuid() == 0) { fprintf(stderr, "NeonServ may not be run with super user privileges.\n"); exit(0); } + #endif + #ifdef ENABLE_MEMORY_DEBUG + initMemoryDebug(); + #endif if(!loadConfig(CONF_FILE)) { fprintf(stderr, "Unable to load " CONF_FILE "\n"); exit(0); @@ -244,10 +249,6 @@ main: signal(SIGSEGV, sighandler); signal(SIGTERM, sighandler); - #ifdef ENABLE_MEMORY_DEBUG - initMemoryDebug(); - #endif - start_time = time(0); #ifdef WIN32 diff --git a/src/modules.c b/src/modules.c index d29e7a8..0d65cb8 100644 --- a/src/modules.c +++ b/src/modules.c @@ -15,7 +15,9 @@ * along with this program. If not, see . */ #include "modules.h" +#ifndef WIN32 #include +#endif /* 000-011 */ #include "main.h" /* 012 */ #include "BanNode.h" @@ -263,7 +265,7 @@ void loadModules() { if(get_int_field(tmp)) { modinfo = loadModule(modulelist[i]); sprintf(tmp, "modules.%s.protected", modulelist[i]); - if(!get_int_field(tmp)) + if(get_int_field(tmp)) modinfo->state |= MODINFO_STATE_PROTECTED; } i++; @@ -333,6 +335,7 @@ struct ModuleInfo *loadModule(char *name) { modinfo->startfunc = startfunc; modinfo->loopfunc = loopfunc; modinfo->stopfunc = stopfunc; + modinfo->state = 0; modinfo->next = modules; modules = modinfo; return modinfo; diff --git a/src/modules.h b/src/modules.h index 9df733f..13856ec 100644 --- a/src/modules.h +++ b/src/modules.h @@ -16,6 +16,7 @@ */ #ifndef _modules_h #define _modules_h +#include "main.h" #define MODINFO_STATE_STARTED 0x01 #define MODINFO_STATE_PROTECTED 0x02 diff --git a/src/overall.h b/src/overall.h index 8f167e9..753ec2b 100644 --- a/src/overall.h +++ b/src/overall.h @@ -45,6 +45,11 @@ #include #include #include +#include +#ifdef SYNCHRONIZE +//some winnt machines do already have a SYNCHRONIZE macro defined... +#undef SYNCHRONIZE +#endif #ifdef HAVE_THREADS #include #ifdef WIN32 diff --git a/src/signal.c b/src/signal.c index 848828c..4b13abe 100644 --- a/src/signal.c +++ b/src/signal.c @@ -40,7 +40,11 @@ void sighandler(int signum) { sigcrash(signum); break; } + #ifdef WIN32 + exit(signum); + #else kill(getpid(), signum); + #endif } static void sigcrash(int signum) { @@ -86,7 +90,7 @@ static void sigcrash(int signum) { } putlog(LOGLEVEL_INFO, "hard shutdown..."); exit_daemon(); - sleep(1); + usleep(1000000); //hard restart restart_process(); } -- 2.20.1