diff -r 4feced261c68 -r de822cd3df3a project_files/frontlib/util/logging.c --- a/project_files/frontlib/util/logging.c Tue Jan 21 22:38:13 2014 +0100 +++ b/project_files/frontlib/util/logging.c Tue Jan 21 22:43:06 2014 +0100 @@ -1,145 +1,145 @@ -/* - * Hedgewars, a free turn based strategy game - * Copyright (C) 2012 Simeon Maxein - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include "logging.h" - -#include -#include -#include -#include - -static int flib_loglevel = FLIB_LOGLEVEL_INFO; -static FILE *flib_logfile = NULL; -void (*flib_logCallback)(int level, const char *msg) = NULL; - -char* flib_format_ip(uint32_t numip) { - static char ip[16]; - snprintf(ip, 16, "%u.%u.%u.%u", (unsigned)(numip>>24), (unsigned)((numip>>16)&0xff), (unsigned)((numip>>8)&0xff), (unsigned)(numip&0xff)); - return ip; -} - -static inline FILE *flib_log_getfile() { - if(flib_logfile==NULL) { - return stdout; - } else { - return flib_logfile; - } -} - -static int log_time(char *buffer) { - time_t timer; - struct tm* tm_info; - - time(&timer); - tm_info = localtime(&timer); - - return strftime(buffer, 25, "%Y-%m-%d %H:%M:%S", tm_info); -} - -static char getPrefix(int level) { - switch(level) { - case FLIB_LOGLEVEL_ERROR: return 'E'; - case FLIB_LOGLEVEL_WARNING: return 'W'; - case FLIB_LOGLEVEL_INFO: return 'I'; - case FLIB_LOGLEVEL_DEBUG: return 'D'; - default: return '?'; - } -} - -static void _flib_vflog(const char *func, int level, const char *fmt, va_list args) { - if(level >= flib_loglevel) { - char logbuffer[1024]; - logbuffer[0] = getPrefix(level); - logbuffer[1] = ' '; - - int pos = 2; - - int len = log_time(logbuffer+pos); - if(len>=0) { - pos += len; - if(pos>sizeof(logbuffer)-1) pos = sizeof(logbuffer)-1; - } else { - return; - } - - len = snprintf(logbuffer+pos, sizeof(logbuffer)-pos, " [%-30s] ", func); - if(len>=0) { - pos += len; - if(pos>sizeof(logbuffer)-1) pos = sizeof(logbuffer)-1; - } else { - return; - } - - len = vsnprintf(logbuffer+pos, sizeof(logbuffer)-pos, fmt, args); - if(len>=0) { - pos += len; - if(pos>sizeof(logbuffer)-1) pos = sizeof(logbuffer)-1; - } else { - return; - } - - if(flib_logCallback != NULL) { - flib_logCallback(level, logbuffer); - } else { - FILE *logfile = flib_log_getfile(); - fputs(logbuffer, logfile); - fputc('\n', logfile); - fflush(logfile); - } - } -} - -void _flib_flog(const char *func, int level, const char *fmt, ...) { - va_list argp; - va_start(argp, fmt); - _flib_vflog(func, level, fmt, argp); - va_end(argp); -} - -bool _flib_fassert(const char *func, int level, bool cond, const char *fmt, ...) { - if(!cond) { - va_list argp; - va_start(argp, fmt); - _flib_vflog(func, level, fmt, argp); - va_end(argp); - } - return !cond; -} - -int flib_log_getLevel() { - return flib_loglevel; -} - -void flib_log_setLevel(int level) { - flib_loglevel = level; -} - -void flib_log_setFile(FILE *file) { - flib_logfile = file; - flib_logCallback = NULL; -} - -bool flib_log_isActive(int level) { - return level >= flib_log_getLevel(); -} - -void flib_log_setCallback(void (*logCallback)(int level, const char *msg)) { - flib_logCallback = logCallback; - flib_logfile = NULL; -} +/* + * Hedgewars, a free turn based strategy game + * Copyright (C) 2012 Simeon Maxein + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "logging.h" + +#include +#include +#include +#include + +static int flib_loglevel = FLIB_LOGLEVEL_INFO; +static FILE *flib_logfile = NULL; +void (*flib_logCallback)(int level, const char *msg) = NULL; + +char* flib_format_ip(uint32_t numip) { + static char ip[16]; + snprintf(ip, 16, "%u.%u.%u.%u", (unsigned)(numip>>24), (unsigned)((numip>>16)&0xff), (unsigned)((numip>>8)&0xff), (unsigned)(numip&0xff)); + return ip; +} + +static inline FILE *flib_log_getfile() { + if(flib_logfile==NULL) { + return stdout; + } else { + return flib_logfile; + } +} + +static int log_time(char *buffer) { + time_t timer; + struct tm* tm_info; + + time(&timer); + tm_info = localtime(&timer); + + return strftime(buffer, 25, "%Y-%m-%d %H:%M:%S", tm_info); +} + +static char getPrefix(int level) { + switch(level) { + case FLIB_LOGLEVEL_ERROR: return 'E'; + case FLIB_LOGLEVEL_WARNING: return 'W'; + case FLIB_LOGLEVEL_INFO: return 'I'; + case FLIB_LOGLEVEL_DEBUG: return 'D'; + default: return '?'; + } +} + +static void _flib_vflog(const char *func, int level, const char *fmt, va_list args) { + if(level >= flib_loglevel) { + char logbuffer[1024]; + logbuffer[0] = getPrefix(level); + logbuffer[1] = ' '; + + int pos = 2; + + int len = log_time(logbuffer+pos); + if(len>=0) { + pos += len; + if(pos>sizeof(logbuffer)-1) pos = sizeof(logbuffer)-1; + } else { + return; + } + + len = snprintf(logbuffer+pos, sizeof(logbuffer)-pos, " [%-30s] ", func); + if(len>=0) { + pos += len; + if(pos>sizeof(logbuffer)-1) pos = sizeof(logbuffer)-1; + } else { + return; + } + + len = vsnprintf(logbuffer+pos, sizeof(logbuffer)-pos, fmt, args); + if(len>=0) { + pos += len; + if(pos>sizeof(logbuffer)-1) pos = sizeof(logbuffer)-1; + } else { + return; + } + + if(flib_logCallback != NULL) { + flib_logCallback(level, logbuffer); + } else { + FILE *logfile = flib_log_getfile(); + fputs(logbuffer, logfile); + fputc('\n', logfile); + fflush(logfile); + } + } +} + +void _flib_flog(const char *func, int level, const char *fmt, ...) { + va_list argp; + va_start(argp, fmt); + _flib_vflog(func, level, fmt, argp); + va_end(argp); +} + +bool _flib_fassert(const char *func, int level, bool cond, const char *fmt, ...) { + if(!cond) { + va_list argp; + va_start(argp, fmt); + _flib_vflog(func, level, fmt, argp); + va_end(argp); + } + return !cond; +} + +int flib_log_getLevel() { + return flib_loglevel; +} + +void flib_log_setLevel(int level) { + flib_loglevel = level; +} + +void flib_log_setFile(FILE *file) { + flib_logfile = file; + flib_logCallback = NULL; +} + +bool flib_log_isActive(int level) { + return level >= flib_log_getLevel(); +} + +void flib_log_setCallback(void (*logCallback)(int level, const char *msg)) { + flib_logCallback = logCallback; + flib_logfile = NULL; +}