*** VERSION 5.3.0 ***
[NeonServV5.git] / src / main.c
index 1728d00aeac1b47b0a947b7fcd6790a40fec6b8d..ae5d7829608775db08b7ff4adeb1f46f18cb6c5f 100644 (file)
@@ -1,4 +1,4 @@
-/* main.c - NeonServ v5.2
+/* main.c - NeonServ v5.3
  * Copyright (C) 2011  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
@@ -38,7 +38,7 @@
 #include "ssl.h"
 
 time_t start_time;
-static int running;
+static int running, hard_restart;
 static int statistics_requested_lusers = 0;
 int statistics_enabled;
 TIMEQ_CALLBACK(main_statistics);
@@ -92,7 +92,7 @@ static int load_mysql_config() {
     return 1;
 }
 
-int main(void) {
+int main(int argc, char *argv[]) {
 main:
     
     start_time = time(0);
@@ -147,6 +147,18 @@ main:
         queue_loop();
     }
     cleanup();
+    if(hard_restart) {
+        /* Append a NULL to the end of argv[]. */
+        char **restart_argv = (char **)alloca((argc + 1) * sizeof(char *));
+        memcpy(restart_argv, argv, argc * sizeof(char *));
+        restart_argv[argc] = NULL;
+        
+        #ifdef WIN32
+        execv(argv[0], (const char * const*)restart_argv);
+        #else
+        execv(argv[0], restart_argv);
+        #endif
+    }
     goto main;
 }
 
@@ -179,7 +191,8 @@ int stricmplen (const char *s1, const char *s2, int len)
    return c1 - c2;
 }
 
-void restart_bot(int hard_restart) {
+void restart_bot(int do_hard_restart) {
+    hard_restart = do_hard_restart;
     running = 0;
 }