X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flog.cpp;h=ce660e8a0cf742fdf189f05d0ddfa4308fc89030;hb=6c19e4098a43c47f8cd1824902f7335e124b834f;hp=bdbab62c4a8a366c4d6f551a5545f8ea7ddd8321;hpb=86bd0f2592c3cd674239532247276bd2d579a857;p=virtualjaguar diff --git a/src/log.cpp b/src/log.cpp index bdbab62..ce660e8 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -1,60 +1,60 @@ -////////////////////////////////////////////////////////////////////////////// // -////////////////////////////////////////////////////////////////////////////// +// Log handler // +// Originally by David Raingeard (Cal2) +// GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) +// Cleanups/new stuff by James L. Hammons // -// -// -// -// -////////////////////////////////////////////////////////////////////////////// -#include "include/log.h" +#include "log.h" -FILE *log_stream=NULL; +#include +#include +#include "types.h" -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// -int log_init(char *path) +#define MAX_LOG_SIZE 10000000 // Maximum size of log file (10 MB) + +static FILE * log_stream = NULL; +static uint32 logSize = 0; + +int log_init(const char * path) { - log_stream=fopen(path,"wrt"); - if (log_stream==NULL) - return(0); - return(1); + log_stream = fopen(path, "wrt"); + + if (log_stream == NULL) + return 0; + + return 1; } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// -FILE *log_get(void) + +FILE * log_get(void) { - return(log_stream); + return log_stream; } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void log_done(void) { 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! +// +void WriteLog(const char * text, ...) +{ + va_list arg; + + va_start(arg, text); + logSize += vfprintf(log_stream, text, arg); + + if (logSize > MAX_LOG_SIZE) + { + fflush(log_stream); + fclose(log_stream); + exit(1); + }//*/ + + va_end(arg); + fflush(log_stream); // Make sure that text is written! +}