Add changes from 3.0.6-2, 3.0.6-3 and several unreleased changes
[privoxy.git] / errlog.c
index 99ec173..e9e8daa 100644 (file)
--- a/errlog.c
+++ b/errlog.c
@@ -1,4 +1,4 @@
-const char errlog_rcs[] = "$Id: errlog.c,v 1.47 2006/11/28 15:25:15 fabiankeil Exp $";
+const char errlog_rcs[] = "$Id: errlog.c,v 1.50 2007/04/11 10:55:44 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/errlog.c,v $
@@ -33,6 +33,19 @@ const char errlog_rcs[] = "$Id: errlog.c,v 1.47 2006/11/28 15:25:15 fabiankeil E
  *
  * Revisions   :
  *    $Log: errlog.c,v $
+ *    Revision 1.50  2007/04/11 10:55:44  fabiankeil
+ *    Enforce some assertions that could be triggered
+ *    on mingw32 and other systems where we use threads
+ *    but no locks.
+ *
+ *    Revision 1.49  2007/04/08 16:44:15  fabiankeil
+ *    We need <sys/time.h> for gettimeofday(), not <time.h>.
+ *
+ *    Revision 1.48  2007/03/31 13:33:28  fabiankeil
+ *    Add alternative log_error() with timestamps
+ *    that contain milliseconds and without using
+ *    strcpy(), strcat() or sprintf().
+ *
  *    Revision 1.47  2006/11/28 15:25:15  fabiankeil
  *    Only unlink the pidfile if it's actually used.
  *
@@ -273,7 +286,8 @@ const char errlog_rcs[] = "$Id: errlog.c,v 1.47 2006/11/28 15:25:15 fabiankeil E
 
 #if defined(HAVE_STRLCPY) && defined(HAVE_GETTIMEOFDAY)
 #define USE_NEW_LOG_ERROR
-#include <time.h>
+/* For gettimeofday() */
+#include <sys/time.h>
 #endif /* defined(HAVE_STRLCPY) && defined(HAVE_GETTIMEOFDAY) */
 
 #if !defined(_WIN32) && !defined(__OS2__)
@@ -797,8 +811,8 @@ void log_error(int loglevel, const char *fmt, ...)
    outbuf = outbuf_save;
 
    /*
-    * Memsetting the whole buffer to zero
-    * here make things easier later on.
+    * Memsetting the whole buffer to zero (in theory)
+    * makes things easier later on.
     */
    memset(outbuf, 0, log_buffer_size);
 
@@ -827,10 +841,15 @@ void log_error(int loglevel, const char *fmt, ...)
       if (ch != '%')
       {
          outbuf[length++] = ch;
-         assert(outbuf[length] == '\0');
+         /*
+          * XXX: Only necessary on platforms which don't use pthread
+          * mutexes (mingw32 for example), where multiple threads can
+          * write to the buffer at the same time.
+          */
+         outbuf[length] = '\0';
          continue;
       }
-      assert(outbuf[length] == '\0');
+      outbuf[length] = '\0';
       ch = *src++;
       switch (ch) {
          case '%':
@@ -998,8 +1017,8 @@ void log_error(int loglevel, const char *fmt, ...)
       assert(outbuf[log_buffer_size] == '\0');
 
       snprintf(outbuf, log_buffer_size,
-         "%s Privoxy(%08lx) Fatal error: log_error()'s sanity checks failed. length: %u\n"
-         "Exiting.", timestamp, thread_id, length);
+         "%s Privoxy(%08lx) Fatal error: log_error()'s sanity checks failed. length: %d\n"
+         "Exiting.", timestamp, thread_id, (int)length);
       loglevel = LOG_LEVEL_FATAL;
    }