]>
jfr.im git - irc/quakenet/newserv.git/blob - core/error.c
12 static corehandler
*coreh
, *coret
;
14 char *sevtostring(int severity
) {
32 return "terminal error";
35 return "unknown error";
39 void reopen_logfile(int hooknum
, void *arg
) {
43 logfile
=fopen("logs/newserv.log","a");
47 logfile
=fopen("logs/newserv.log","a");
49 fprintf(stderr
,"Failed to open logfile...\n");
51 registerhook(HOOK_CORE_SIGUSR1
, reopen_logfile
);
55 deregisterhook(HOOK_CORE_SIGUSR1
, reopen_logfile
);
60 void Error(char *source
, int severity
, char *reason
, ... ) {
66 struct error_event evt
;
69 vsnprintf(buf
,512,reason
,va
);
72 evt
.severity
=severity
;
75 triggerhook(HOOK_CORE_ERROR
, &evt
);
77 if (severity
>ERR_DEBUG
) {
80 strftime(timebuf
,100,"%Y-%m-%d %H:%M:%S",tm
);
81 fprintf(stderr
,"[%s] %s(%s): %s\n",timebuf
,sevtostring(severity
),source
,buf
);
85 fprintf(logfile
,"[%s] %s(%s): %s\n",timebuf
,sevtostring(severity
),source
,buf
);
90 if (severity
>=ERR_STOP
) {
91 fprintf(stderr
,"Terminal error occured, exiting...\n");
92 triggerhook(HOOK_CORE_STOPERROR
, NULL
);
97 void handlecore(void) {
100 /* no attempt is made to clean these up */
101 for(n
=coreh
;coreh
;n
=coreh
->next
)
105 corehandler
*registercorehandler(CoreHandlerFn fn
, void *arg
) {
106 corehandler
*c
= (corehandler
*)malloc(sizeof(corehandler
));
107 /* core if we can't allocate!! */
121 void deregistercorehandler(corehandler
*c
) {
125 c
->prev
->next
= c
->next
;
131 c
->next
->prev
= c
->prev
;