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