*/
#include "main.h"
+#include "signal.h"
#include "ClientSocket.h"
#include "UserNode.h"
#include "ChanNode.h"
int statistics_enabled;
TIMEQ_CALLBACK(main_statistics);
TIMEQ_CALLBACK(main_checkauths);
+static int process_argc;
+static char **process_argv;
#ifdef HAVE_THREADS
int running_threads;
pthread_mutex_t cache_sync;
int main(int argc, char *argv[]) {
main:
+ process_argv = argv;
+ process_argc = argc;
+
+ signal(SIGABRT, sighandler);
+ signal(SIGFPE, sighandler);
+ signal(SIGILL, sighandler);
+ signal(SIGINT, sighandler);
+ signal(SIGSEGV, sighandler);
+ signal(SIGTERM, sighandler);
start_time = time(0);
#endif
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
+ restart_process();
}
goto main;
}
+void restart_process() {
+ /* Append a NULL to the end of argv[]. */
+ char **restart_argv = (char **)alloca((process_argc + 1) * sizeof(char *));
+ memcpy(restart_argv, process_argv, process_argc * sizeof(char *));
+ restart_argv[process_argc] = NULL;
+ #ifdef WIN32
+ execv(process_argv[0], (const char * const*)restart_argv);
+ #else
+ execv(process_argv[0], restart_argv);
+ #endif
+}
+
int stricmp (const char *s1, const char *s2)
{
if (s1 == NULL) return s2 == NULL ? 0 : -(*s2);