X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flog.cpp;h=2782c930160ad1e8b3a042981ff90d8d8bf0d7b0;hb=4ae28f82ab456ddc236e9c7ca5c5b539abb9b62d;hp=cd968ee36f260651ef597bd7b720fafe6aec215b;hpb=135a0c52a2bcbcc37192c61801de6e9c80aeebff;p=virtualjaguar diff --git a/src/log.cpp b/src/log.cpp index cd968ee..2782c93 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -1,18 +1,35 @@ // // Log handler // -// by cal2 +// Originally by David Raingeard (Cal2) // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) -// Cleanups/new stuff by James L. Hammons +// Cleanups/new stuff by James Hammons +// (C) 2010 Underground Software +// +// JLH = James Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) +// JLH 07/11/2011 Instead of dumping out on max log file size being reached, we +// now just silently ignore any more output. 10 megs ought to be +// enough for anybody. ;-) Except when it isn't. :-P // #include "log.h" -FILE * log_stream = NULL; +#include +#include +#include "types.h" + +#define MAX_LOG_SIZE 10000000 // Maximum size of log file (10 MB) -int log_init(char * path) +static FILE * log_stream = NULL; +static uint32 logSize = 0; + +int LogInit(const char * path) { - log_stream = fopen(path, "wrt"); + log_stream = fopen(path, "w"); if (log_stream == NULL) return 0; @@ -20,31 +37,42 @@ int log_init(char * path) return 1; } -FILE * log_get(void) +FILE * LogGet(void) { return log_stream; } -void log_done(void) +void LogDone(void) { - fclose(log_stream); + if (log_stream != NULL) + fclose(log_stream); } // // This logger is used mainly to ensure that text gets written to the log file // even if the program crashes. The performance hit is acceptable in this case! // -//bool suppressOutput = true;//temporary stuff -bool suppressOutput = false;//temporary stuff void WriteLog(const char * text, ...) { - if (suppressOutput) + va_list arg; + va_start(arg, text); + + if (log_stream == NULL) + { + va_end(arg); return; + } - va_list arg; + logSize += vfprintf(log_stream, text, arg); + + if (logSize > MAX_LOG_SIZE) + { + // Instead of dumping out, we just close the file and ignore any more output. + fflush(log_stream); + fclose(log_stream); + log_stream = NULL; + } - va_start(arg, text); - vfprintf(log_stream, text, arg); va_end(arg); fflush(log_stream); // Make sure that text is written! }