X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/ee697dd98d0f9aca6b9df7ffb32d3a15b4e33d6d..763e458ff3a1cb4f9d11226db91f17069f7b8f7a:/log.c diff --git a/log.c b/log.c index 95f01b6..156f354 100644 --- a/log.c +++ b/log.c @@ -189,6 +189,42 @@ static void log_vmulti(void *sst, int class, const char *message, va_list args) } } +void lg_vperror(struct log_if *lg, const char *desc, struct cloc *loc, + int class, int errnoval, const char *fmt, va_list al) +{ + int status=current_phase; + int esave=errno; + + if (!lg) + lg=system_log; + + if (class & M_FATAL) + enter_phase(PHASE_SHUTDOWN); + + slilog_part(lg,class,"%s",desc); + if (loc) + slilog_part(lg,class," (%s:%d)",loc->file,loc->line); + slilog_part(lg,class,": "); + vslilog_part(lg,class,fmt,al); + if (errnoval) + slilog_part(lg,class,": %s",strerror(errnoval)); + slilog_part(lg,class,"\n"); + + if (class & M_FATAL) + exit(status); + + errno=esave; +} + +void lg_perror(struct log_if *lg, const char *desc, struct cloc *loc, + int class, int errnoval, const char *fmt, ...) +{ + va_list al; + va_start(al,fmt); + lg_vperror(lg,desc,loc,class,errnoval,fmt,al); + va_end(al); +} + struct log_if *init_log(list_t *ll) { int i=0; @@ -545,7 +581,7 @@ void log_from_fd(int fd, cstring_t prefix, struct log_if *log) st->i=0; st->finished=False; - register_for_poll(st,log_from_fd_beforepoll,log_from_fd_afterpoll,1, + register_for_poll(st,log_from_fd_beforepoll,log_from_fd_afterpoll, prefix); }