aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Alc/ALc.c7
-rw-r--r--CMakeLists.txt10
-rw-r--r--OpenAL32/Include/alMain.h38
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 <string.h>
#include <stdio.h>
+#include <stdarg.h>
#ifdef HAVE_FENV_H
#include <fenv.h>
@@ -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