Update Debian Vcs-* fields to point to git repository
[onak.git] / log.c
diff --git a/log.c b/log.c
index 5d067bc7f606f71ea119ec4b1f854b0c88f42fdd..7b17cb0d4191dc209fc1014a5c58df35f5d836c8 100644 (file)
--- a/log.c
+++ b/log.c
@@ -1,9 +1,20 @@
 /*
  * log.c - Simple logging framework.
  *
- * Jonathan McDowell <noodles@earth.li>
+ * Copyright 2003 Jonathan McDowell <noodles@earth.li>
  *
- * Copyright 2003 Project Purple
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include <stdarg.h>
@@ -22,7 +33,7 @@
  *     logs - if we're asked to log something below this level we won't output
  *     it.
  */
-static loglevels logthres = LOGTHING_DEBUG;
+static loglevels logthres = LOGTHING_NOTICE;
 
 /*
  *     logappname - the name of the application using us.
@@ -100,6 +111,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 +176,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;