]> jfr.im git - irc/quakenet/newserv.git/blob - core/error.c
Merge.
[irc/quakenet/newserv.git] / core / error.c
1 /* error.c */
2
3 #include <stdarg.h>
4 #include <time.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include "error.h"
8 #include "hooks.h"
9
10 FILE *logfile;
11
12 char *sevtostring(int severity) {
13 switch(severity) {
14 case ERR_DEBUG:
15 return "debug";
16
17 case ERR_INFO:
18 return "info";
19
20 case ERR_WARNING:
21 return "warning";
22
23 case ERR_ERROR:
24 return "error";
25
26 case ERR_FATAL:
27 return "fatal error";
28
29 case ERR_STOP:
30 return "terminal error";
31
32 default:
33 return "unknown error";
34 }
35 }
36
37 void init_logfile() {
38 logfile=fopen("newserv.log","a");
39 }
40
41 void Error(char *source, int severity, char *reason, ... ) {
42 char buf[512];
43 va_list va;
44 struct tm *tm;
45 time_t now;
46 char timebuf[100];
47 struct error_event evt;
48
49 va_start(va,reason);
50 vsnprintf(buf,512,reason,va);
51 va_end(va);
52
53 evt.severity=severity;
54 evt.message=buf;
55 evt.source=source;
56 triggerhook(HOOK_CORE_ERROR, &evt);
57
58 if (severity>ERR_DEBUG) {
59 now=time(NULL);
60 tm=gmtime(&now);
61 strftime(timebuf,100,"%Y-%m-%d %H:%M:%S",tm);
62 fprintf(stderr,"[%s] %s(%s): %s\n",timebuf,sevtostring(severity),source,buf);
63 if (logfile)
64 fprintf(logfile,"[%s] %s(%s): %s\n",timebuf,sevtostring(severity),source,buf);
65 }
66
67 if (severity>=ERR_STOP) {
68 fprintf(stderr,"Terminal error occured, exiting...\n");
69 triggerhook(HOOK_CORE_STOPERROR, NULL);
70 exit(0);
71 }
72 }