]> git.sommitrealweird.co.uk Git - onak.git/blobdiff - log.c
cscvs to tla changeset 108
[onak.git] / log.c
diff --git a/log.c b/log.c
index 5d067bc7f606f71ea119ec4b1f854b0c88f42fdd..dc8c2e8d6198c418f92fab0d75d182044ec06b30 100644 (file)
--- a/log.c
+++ b/log.c
@@ -4,6 +4,8 @@
  * Jonathan McDowell <noodles@earth.li>
  *
  * Copyright 2003 Project Purple
+ *
+ * $Id: log.c,v 1.4 2003/06/04 20:57:10 noodles Exp $
  */
 
 #include <stdarg.h>
@@ -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;