diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/syserr.c | 27 | ||||
-rw-r--r-- | lib/syserr.h | 2 |
2 files changed, 25 insertions, 4 deletions
diff --git a/lib/syserr.c b/lib/syserr.c index 048cd45..66a2067 100644 --- a/lib/syserr.c +++ b/lib/syserr.c @@ -20,6 +20,13 @@ #include "syserr.h" +static FILE* err_log; + +void sys_err_setlogfile(FILE* log) +{ + err_log = log; +} + void sys_err(int pri, char *fn, int ln, int en, char *fmt, ...) { va_list args; @@ -29,11 +36,17 @@ void sys_err(int pri, char *fn, int ln, int en, char *fmt, ...) vsnprintf(buf, SYSERR_MSGSIZE, fmt, args); va_end(args); buf[SYSERR_MSGSIZE - 1] = 0; /* Make sure it is null terminated */ - if (en) + if (en) { + if (err_log) + fprintf(err_log, "%s: %d: %d (%s) %s\n", + fn, ln, en, strerror(en), buf); syslog(pri, "%s: %d: %d (%s) %s", fn, ln, en, strerror(en), buf); - else + } else { + if (err_log) + fprintf(err_log, "%s: %d: %s\n", fn, ln, buf); syslog(pri, "%s: %d: %s", fn, ln, buf); + } } void sys_errpack(int pri, char *fn, int ln, int en, struct sockaddr_in *peer, @@ -65,10 +78,16 @@ void sys_errpack(int pri, char *fn, int ln, int en, struct sockaddr_in *peer, } buf2[pos] = 0; - if (en) + if (en) { + if (err_log) + fprintf(err_log, "%s: %d: %d (%s) %s. %s\n", + fn, ln, en, strerror(en), buf, buf2); syslog(pri, "%s: %d: %d (%s) %s. %s", fn, ln, en, strerror(en), buf, buf2); - else + } else { + if (err_log) + fprintf(err_log, "%s: %d: %s. %s\n", fn, ln, buf, buf2); syslog(pri, "%s: %d: %s. %s", fn, ln, buf, buf2); + } } diff --git a/lib/syserr.h b/lib/syserr.h index e3ebdf0..a65dfc3 100644 --- a/lib/syserr.h +++ b/lib/syserr.h @@ -14,6 +14,8 @@ #define SYSERR_MSGSIZE 256 +void sys_err_setlogfile(FILE*); + void sys_err(int pri, char *filename, int en, int line, char *fmt, ...); void sys_errpack(int pri, char *fn, int ln, int en, struct sockaddr_in *peer, void *pack, unsigned len, char *fmt, ...); |