-const char errlog_rcs[] = "$Id: errlog.c,v 1.56 2007/10/14 14:26:56 fabiankeil Exp $";
+const char errlog_rcs[] = "$Id: errlog.c,v 1.67 2008/03/27 18:27:23 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/errlog.c,v $
*
* Revisions :
* $Log: errlog.c,v $
+ * Revision 1.67 2008/03/27 18:27:23 fabiankeil
+ * Remove kill-popups action.
+ *
+ * Revision 1.66 2008/01/31 15:38:14 fabiankeil
+ * - Make the logfp assertion more strict. As of 1.63, the "||" could
+ * have been an "&&", which means we can use two separate assertions
+ * and skip on of them on Windows.
+ * - Break a long commit message line in two.
+ *
+ * Revision 1.65 2008/01/31 14:44:33 fabiankeil
+ * Use (a != b) instead of !(a == b) so the sanity check looks less insane.
+ *
+ * Revision 1.64 2008/01/21 18:56:46 david__schmidt
+ * Swap #def from negative to positive, re-joined it so it didn't
+ * span an assertion (compilation failure on OS/2)
+ *
+ * Revision 1.63 2007/12/15 19:49:32 fabiankeil
+ * Stop overloading logfile to control the mingw32 log window as well.
+ * It's no longer necessary now that we disable all debug lines by default
+ * and at least one user perceived it as a regression (added in 1.55).
+ *
+ * Revision 1.62 2007/11/30 15:33:46 fabiankeil
+ * Unbreak LOG_LEVEL_FATAL. It wasn't fatal with logging disabled
+ * and on mingw32 fatal log messages didn't end up in the log file.
+ *
+ * Revision 1.61 2007/11/04 19:03:01 fabiankeil
+ * Fix another deadlock Hal spotted and that mysteriously didn't affect FreeBSD.
+ *
+ * Revision 1.60 2007/11/03 19:03:31 fabiankeil
+ * - Prevent the Windows GUI from showing the version two times in a row.
+ * - Stop using the imperative in the "(Re-)Open logfile" message.
+ * - Ditch the "Switching to daemon mode" message as the detection
+ * whether or not we're already in daemon mode doesn't actually work.
+ *
+ * Revision 1.59 2007/11/01 12:50:56 fabiankeil
+ * Here's looking at you, deadlock.
+ *
+ * Revision 1.58 2007/10/28 19:04:21 fabiankeil
+ * Don't mention daemon mode in "Logging disabled" message. Some
+ * platforms call it differently and it's not really relevant anyway.
+ *
+ * Revision 1.57 2007/10/27 13:02:26 fabiankeil
+ * Relocate daemon-mode-related log messages to make sure
+ * they aren't shown again in case of configuration reloads.
+ *
* Revision 1.56 2007/10/14 14:26:56 fabiankeil
* Remove the old log_error() version.
*
/* Cleanup - remove taskbar icon etc. */
TermLogWindow();
-
-#else /* if !defined(_WIN32) || defined(_WIN_CONSOLE) */
- fputs(error_message, logfp);
#endif /* defined(_WIN32) && !defined(_WIN_CONSOLE) */
+ if (logfp != NULL)
+ {
+ fputs(error_message, logfp);
+ }
+
#if defined(unix)
if (pidfile)
{
*********************************************************************/
void disable_logging(void)
{
- lock_logfile();
if (logfp != NULL)
{
log_error(LOG_LEVEL_INFO,
- "No logfile configured while in daemon mode. Logging disabled.");
+ "No logfile configured. Please enable it before reporting any problems.");
+ lock_logfile();
fclose(logfp);
logfp = NULL;
+ unlock_logfile();
}
- unlock_logfile();
}
assert(NULL != logfname);
lock_loginit();
- lock_logfile();
- if (logfp == stderr)
- {
- log_error(LOG_LEVEL_INFO,
- "Switching to daemon mode. Log messages will be written to: %s", logfname);
- }
- else if (logfp != NULL)
+ if (logfp != NULL)
{
- log_error(LOG_LEVEL_INFO, "(Re-)Open logfile \'%s\'", logfname ? logfname : "none");
+ log_error(LOG_LEVEL_INFO, "(Re-)Opening logfile \'%s\'", logfname);
}
/* set the designated log file */
/* set logging to be completely unbuffered */
setbuf(fp, NULL);
+ lock_logfile();
if (logfp != NULL)
{
fclose(logfp);
logfp = fp;
unlock_logfile();
+#if !defined(_WIN32)
+ /*
+ * Prevent the Windows GUI from showing the version two
+ * times in a row on startup. It already displayed the show_version()
+ * call from init_log_module() that other systems write to stderr.
+ *
+ * This means mingw32 users will never see the version in their
+ * log file, but I assume they wouldn't look for it there anyway
+ * and simply use the "Help/About Privoxy" menu.
+ */
show_version(prog_name);
+#endif /* def unix */
unlock_loginit();
case LOG_LEVEL_DEANIMATE:
log_level_string = "Gif-Deanimate";
break;
-#ifdef FEATURE_KILL_POPUPS
- case LOG_LEVEL_POPUPS:
- log_level_string = "Kill-Popups";
- break;
-#endif /* def FEATURE_KILL_POPUPS */
case LOG_LEVEL_CGI:
log_level_string = "CGI";
break;
* settings and that logging is enabled.
* Bail out otherwise.
*/
- if ((0 == (loglevel & debug)) || (logfp == NULL))
+ if ((0 == (loglevel & debug))
+#ifndef _WIN32
+ || (logfp == NULL)
+#endif
+ )
{
return;
}
snprintf(tempbuf, sizeof(tempbuf),
"%s Privoxy(%08lx) Fatal error: log_error() failed to allocate buffer memory.\n"
"\nExiting.", timestamp, thread_id);
- assert(NULL != logfp);
- fputs(tempbuf, logfp);
- unlock_logfile();
fatal_error(tempbuf); /* Exit */
}
}
length += strlcpy(outbuf + length, "\n", log_buffer_size - length);
/* Some sanity checks */
- if (!(length < log_buffer_size)
- || !(outbuf[log_buffer_size-1] == '\0')
- || !(outbuf[log_buffer_size] == '\0')
+ if ((length >= log_buffer_size)
+ || (outbuf[log_buffer_size-1] != '\0')
+ || (outbuf[log_buffer_size] != '\0')
)
{
/* Repeat as assertions */
loglevel = LOG_LEVEL_FATAL;
}
+#ifndef _WIN32
+ /*
+ * On Windows this is acceptable in case
+ * we are logging to the GUI window only.
+ */
assert(NULL != logfp);
+#endif
if (loglevel == LOG_LEVEL_FATAL)
{
fatal_error(outbuf_save);
/* Never get here */
}
- fputs(outbuf_save, logfp);
-
+ if (logfp != NULL)
+ {
+ fputs(outbuf_save, logfp);
+ }
unlock_logfile();
#if defined(_WIN32) && !defined(_WIN_CONSOLE)