X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/3b5b9db0bc2dbe93b3b79e722997606c71ecafb9..58d762ea573eb3cfea626bb52ea7a99e24b8a0aa:/log.c?ds=inline diff --git a/log.c b/log.c index 5d067bc..dc8c2e8 100644 --- a/log.c +++ b/log.c @@ -4,6 +4,8 @@ * Jonathan McDowell * * Copyright 2003 Project Purple + * + * $Id: log.c,v 1.4 2003/06/04 20:57:10 noodles Exp $ */ #include @@ -100,6 +102,57 @@ loglevels setlogthreshold(loglevels loglevel) return oldlevel; } +/* + * vflog - write a log entry to an already opened log file. + * @logfile: The FILE * handle of the open log file. + * @format: A format string. + * @ap: The va_list of the parmeters for the format string. + * + * This function outputs a log entry to an opened file. A leading + * time/date stamp and a trailing newline are automatically added. The + * format parameter is of the same nature as that used in vprintf. + */ +static void vflog(FILE *logfile, const char *format, va_list ap) +{ + struct tm *timestamp = NULL; + time_t timer = 0; + + timer = time(NULL); + timestamp = localtime(&timer); + + fprintf(logfile, "[%02d/%02d/%4d %02d:%02d:%02d] %s[%d]: ", + timestamp->tm_mday, + timestamp->tm_mon + 1, + timestamp->tm_year + 1900, + timestamp->tm_hour, + timestamp->tm_min, + timestamp->tm_sec, + (logappname == NULL) ? "" : logappname, + getpid()); + vfprintf(logfile, format, ap); + fprintf(logfile, "\n"); + + return; +} + +/* + * flog - write a log entry to an already opened log file. + * @logfile: The FILE * handle of the open log file. + * @format: A format string. + * + * This function outputs a log entry to an opened file. A leading + * time/date stamp and a trailing newline are automatically added. The + * format parameter is of the same nature as that used in printf. + */ +static void flog(FILE *logfile, const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + vflog(logfile, format, ap); + va_end(ap); +} + /* * logthing - output a log entry * @loglevel: The level of the log. @@ -114,37 +167,27 @@ loglevels setlogthreshold(loglevels loglevel) int logthing(loglevels loglevel, const char *format, ...) { FILE *logfile = NULL; - struct tm *timestamp = NULL; - time_t timer = 0; va_list ap; if (loglevel >= logthres) { - timer = time(NULL); - timestamp = localtime(&timer); - if (logfilename != NULL) { logfile = fopen(logfilename, "a"); - flockfile(logfile); + if (logfile != NULL) { + flockfile(logfile); + } else { + logfile = stderr; + flog(logfile, "Couldn't open logfile: %s", + logfilename); + } } else { logfile = stderr; } - fprintf(logfile, "[%02d/%02d/%4d %02d:%02d:%02d] %s[%d]: ", - timestamp->tm_mday, - timestamp->tm_mon, - timestamp->tm_year + 1900, - timestamp->tm_hour, - timestamp->tm_min, - timestamp->tm_sec, - (logappname == NULL) ? "" : logappname, - getpid()); va_start(ap, format); - vfprintf(logfile, format, ap); + vflog(logfile, format, ap); va_end(ap); - fprintf(logfile, "\n"); - - if (logfilename != NULL) { + if (logfile != stderr) { funlockfile(logfile); fclose(logfile); logfile = NULL;