diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-03-10 00:48:45 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-03-10 00:48:45 +0000 |
| commit | 89eea17ead1ce1e777f7fc87c4869b3547f86867 (patch) | |
| tree | 41e2c7154d25ef8e0ffa052db617081a2f1252cd /src/engine/e_system.c | |
| parent | 78155fa6d766d4529e8f602cb36457bce55cb17d (diff) | |
| download | zcatch-89eea17ead1ce1e777f7fc87c4869b3547f86867.tar.gz zcatch-89eea17ead1ce1e777f7fc87c4869b3547f86867.zip | |
added option to log to file
Diffstat (limited to 'src/engine/e_system.c')
| -rw-r--r-- | src/engine/e_system.c | 91 |
1 files changed, 58 insertions, 33 deletions
diff --git a/src/engine/e_system.c b/src/engine/e_system.c index 044b48a2..72d131cb 100644 --- a/src/engine/e_system.c +++ b/src/engine/e_system.c @@ -51,7 +51,13 @@ IOHANDLE io_stdin() { return (IOHANDLE)stdin; } IOHANDLE io_stdout() { return (IOHANDLE)stdout; } IOHANDLE io_stderr() { return (IOHANDLE)stderr; } -IOHANDLE logfile = 0; +static DBG_LOGGER loggers[16]; +static int num_loggers = 0; + +void dbg_logger(DBG_LOGGER logger) +{ + loggers[num_loggers++] = logger; +} void dbg_assert_imp(const char *filename, int line, int test, const char *msg) { @@ -67,52 +73,65 @@ void dbg_break() *((unsigned*)0) = 0x0; } -int dbg_log_to_file(const char *filename) -{ - logfile = io_open(filename, IOFLAG_WRITE); - if(logfile) - return 1; - return 0; -} - void dbg_msg(const char *sys, const char *fmt, ...) { va_list args; -#if defined(CONF_FAMILY_WINDOWS) char str[1024]; + char *msg; + int i, len; + + str_format(str, sizeof(str), "[%08x][%s]: ", (int)time(0), sys); + len = strlen(str); + msg = (char *)str + len; + va_start(args, fmt); - _vnsprintf(str, sizeof(str), fmt, args); - va_end(args); - OutputDebugString(str); - OutputDebugString("\n"); +#if defined(CONF_FAMILY_WINDOWS) + _vnsprintf(msg, sizeof(str)-len, fmt, args); +#else + vsnprintf(msg, sizeof(str)-len, fmt, args); #endif - - va_start(args, fmt); - printf("[%08x][%s]: ", (int)time(0), sys); - vprintf(fmt, args); va_end(args); - printf("\n"); - fflush(stdout); - - { - char str[2048]; - int len; + + for(i = 0; i < num_loggers; i++) + loggers[i](str); +} - str_format(str, sizeof(str), "[%s]: ", sys); +static void logger_stdout(const char *line) +{ + printf("%s\n", line); +} - va_start(args, fmt); - len = strlen(str); +static void logger_debugger(const char *line) +{ #if defined(CONF_FAMILY_WINDOWS) - _vsnprintf(str+len, sizeof(str)-len, fmt, args); -#else - vsnprintf(str+len, sizeof(str)-len, fmt, args); + OutputDebugString(line); + OutputDebugString("\n"); #endif - va_end(args); +} - console_print(str); - } + +IOHANDLE logfile = 0; +static void logger_file(const char *line) +{ + io_write(logfile, line, strlen(line)); + io_write(logfile, "\n", 1); + io_flush(logfile); } +void dbg_logger_stdout() { dbg_logger(logger_stdout); } +void dbg_logger_debugger() { dbg_logger(logger_debugger); } +void dbg_logger_file(const char *filename) +{ + logfile = io_open(filename, IOFLAG_WRITE); + if(logfile) + dbg_logger(logger_file); + else + dbg_msg("dbg/logger", "failed to open '%s' for logging", filename); + +} + +/* */ + int memory_alloced = 0; struct memheader @@ -278,6 +297,12 @@ int io_close(IOHANDLE io) return 1; } +int io_flush(IOHANDLE io) +{ + fflush((FILE*)io); + return 0; +} + void *thread_create(void (*threadfunc)(void *), void *u) { #if defined(CONF_FAMILY_UNIX) |