]>
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
);
57 deregisterhook(HOOK_CORE_SIGUSR1
, reopen_logfile
);
62 void Error(char *source
, int severity
, char *reason
, ... ) {
68 struct error_event evt
;
71 vsnprintf(buf
,512,reason
,va
);
74 evt
.severity
=severity
;
77 triggerhook(HOOK_CORE_ERROR
, &evt
);
79 if (severity
>ERR_DEBUG
) {
82 strftime(timebuf
,100,"%Y-%m-%d %H:%M:%S",tm
);
83 fprintf(stderr
,"[%s] %s(%s): %s\n",timebuf
,sevtostring(severity
),source
,buf
);
87 fprintf(logfile
,"[%s] %s(%s): %s\n",timebuf
,sevtostring(severity
),source
,buf
);
92 if (severity
>=ERR_STOP
) {
93 fprintf(stderr
,"Terminal error occured, exiting...\n");
94 triggerhook(HOOK_CORE_STOPERROR
, NULL
);
99 void handlecore(void) {
102 /* no attempt is made to clean these up */
103 for(n
=coreh
;coreh
;n
=coreh
->next
)
107 corehandler
*registercorehandler(CoreHandlerFn fn
, void *arg
) {
108 corehandler
*c
= (corehandler
*)malloc(sizeof(corehandler
));
109 /* core if we can't allocate!! */
123 void deregistercorehandler(corehandler
*c
) {
127 c
->prev
->next
= c
->next
;
133 c
->next
->prev
= c
->prev
;