]> Shamusworld >> Repos - virtualjaguar/blob - src/log.cpp
144eb3bfa3fbe838f8512659014a134f9daa64c9
[virtualjaguar] / src / log.cpp
1 //
2 // Log handler
3 //
4 // by Cal2
5 // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS)
6 // Cleanups/new stuff by James L. Hammons
7 //
8
9 #include "types.h"
10 #include "log.h"
11
12 #define MAX_LOG_SIZE            10000000                                // Maximum size of log file (10 MB)
13
14 static FILE * log_stream = NULL;
15 static uint32 logSize = 0;
16
17 int log_init(char * path)
18 {
19         log_stream = fopen(path, "wrt");
20
21         if (log_stream == NULL)
22                 return 0;
23
24         return 1;
25 }
26
27 FILE * log_get(void)
28 {
29         return log_stream;
30 }
31
32 void log_done(void)
33 {
34         fclose(log_stream);
35 }
36
37 //
38 // This logger is used mainly to ensure that text gets written to the log file
39 // even if the program crashes. The performance hit is acceptable in this case!
40 //
41 void WriteLog(const char * text, ...)
42 {
43         va_list arg;
44
45         va_start(arg, text);
46         logSize += vfprintf(log_stream, text, arg);
47
48         if (logSize > MAX_LOG_SIZE)
49         {
50                 fflush(log_stream);
51                 fclose(log_stream);
52                 exit(1);
53         }
54
55         va_end(arg);
56         fflush(log_stream);                                     // Make sure that text is written!
57 }