From 1454c46b5fed42dca9d509a66d4cefac2800289c Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sun, 7 Jun 2009 15:42:15 -0700 Subject: [PATCH] Use a thread-safe static inline function for printing --- Alc/ALc.c | 7 ------- CMakeLists.txt | 10 ++++++++++ OpenAL32/Include/alMain.h | 38 +++++++++++++++++++++++++------------- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/Alc/ALc.c b/Alc/ALc.c index 8812cdea..bf757218 100644 --- a/Alc/ALc.c +++ b/Alc/ALc.c @@ -37,13 +37,6 @@ #include "bs2b.h" #include "alu.h" -/////////////////////////////////////////////////////// -// DEBUG INFORMATION - -char _alDebug[256]; - -/////////////////////////////////////////////////////// - #define EmptyFuncs { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } static struct { diff --git a/CMakeLists.txt b/CMakeLists.txt index af68accb..451e3732 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -168,6 +168,16 @@ IF(NOT HAVE_SNPRINTF) ADD_DEFINITIONS(-Dsnprintf=_snprintf) ENDIF() +CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF) +IF(NOT HAVE_VSNPRINTF) + CHECK_FUNCTION_EXISTS(_vsnprintf HAVE__VSNPRINTF) + IF(NOT HAVE__VSNPRINTF) + MESSAGE(FATAL_ERROR "No vsnprintf function found, please report!") + ENDIF() + + ADD_DEFINITIONS(-Dvsnprintf=_vsnprintf) +ENDIF() + CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN) IF(NOT HAVE_ISNAN) CHECK_FUNCTION_EXISTS(_isnan HAVE__ISNAN) diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index 5efbbbe7..fee0c315 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -3,6 +3,7 @@ #include #include +#include #ifdef HAVE_FENV_H #include @@ -107,19 +108,30 @@ static inline void Sleep(ALuint t) extern "C" { #endif -extern char _alDebug[256]; - -#define AL_PRINT(...) do { \ - int _al_print_i; \ - const char *_al_print_fn = strrchr(__FILE__, '/'); \ - if(!_al_print_fn) _al_print_fn = __FILE__; \ - else _al_print_fn += 1; \ - _al_print_i = snprintf(_alDebug, sizeof(_alDebug), "AL lib: %s:%d: ", _al_print_fn, __LINE__); \ - if(_al_print_i < (int)sizeof(_alDebug) && _al_print_i > 0) \ - snprintf(_alDebug+_al_print_i, sizeof(_alDebug)-_al_print_i, __VA_ARGS__); \ - _alDebug[sizeof(_alDebug)-1] = 0; \ - fprintf(stderr, "%s", _alDebug); \ -} while(0) +static __inline void al_print(const char *fname, unsigned int line, const char *fmt, ...) +{ + const char *fn; + char str[256]; + int i; + + fn = strrchr(fname, '/'); + if(!fn) fn = strrchr(fname, '\\');; + if(!fn) fn = fname; + else fn += 1; + + i = snprintf(str, sizeof(str), "AL lib: %s:%d: ", fn, line); + if(i < (int)sizeof(str) && i > 0) + { + va_list ap; + va_start(ap, fmt); + vsnprintf(str+i, sizeof(str)-i, fmt, ap); + va_end(ap); + } + str[sizeof(str)-1] = 0; + + fprintf(stderr, "%s", str); +} +#define AL_PRINT(...) al_print(__FILE__, __LINE__, __VA_ARGS__) #define SWMIXER_OUTPUT_RATE 44100 -- 2.11.4.GIT