]> jfr.im git - irc/quakenet/newserv.git/blobdiff - core/error.c
fix some format string errors and dergister some hooks, also do some (pointless)...
[irc/quakenet/newserv.git] / core / error.c
index 895e786c7b17fdce756b702f6013ae0a29cbc29e..edd986990bb5e7056f329c07c9c3fa5a3a403e1c 100644 (file)
@@ -9,6 +9,8 @@
 
 FILE *logfile;
 
+static corehandler *coreh, *coret;
+
 char *sevtostring(int severity) {
   switch(severity) {
     case ERR_DEBUG:
@@ -38,14 +40,19 @@ void reopen_logfile(int hooknum, void *arg) {
   if (logfile)
     fclose(logfile);
   
-  logfile=fopen("newserv.log","a");
+  logfile=fopen("logs/newserv.log","a");
 }
 
 void init_logfile() {
-  logfile=fopen("newserv.log","a");
+  logfile=fopen("logs/newserv.log","a");
   registerhook(HOOK_CORE_SIGUSR1, reopen_logfile);
 }
 
+void fini_logfile() {
+  deregisterhook(HOOK_CORE_SIGUSR1, reopen_logfile);
+  fclose(logfile);
+}
+
 void Error(char *source, int severity, char *reason, ... ) {
   char buf[512];
   va_list va;
@@ -78,3 +85,44 @@ void Error(char *source, int severity, char *reason, ... ) {
     exit(0);
   }
 }
+
+void handlecore(void) { 
+  corehandler *n;
+
+  /* no attempt is made to clean these up */
+  for(n=coreh;coreh;n=coreh->next)
+    (n->fn)(n->arg);
+}
+
+corehandler *registercorehandler(CoreHandlerFn fn, void *arg) {
+  corehandler *c = (corehandler *)malloc(sizeof(corehandler));
+  /* core if we can't allocate!! */
+
+  c->fn = fn;
+  c->arg = arg;
+  c->next = NULL;
+  c->prev = coret;
+  coret = c->prev;
+
+  if(!coreh)
+    coreh = c;
+
+  return c;
+}
+
+void deregistercorehandler(corehandler *c) {
+  if(!c->prev) {
+    coreh = c->next;
+  } else {
+    c->prev->next = c->next;
+  }
+
+  if(!c->next) {
+    coret = c->prev;
+  } else {
+    c->next->prev = c->prev;
+  }
+
+  free(c);
+}
+