aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2010-01-12 08:48:25 -0800
committerChris Robinson <[email protected]>2010-01-12 08:48:25 -0800
commit0c2efa1253514dbaeb15cc72a704761ed598c4fc (patch)
treeacdf975f01646a1fcb6aac6aaa0798ce0f9b1014
parent5921e18be29d04a1164c69be36289bf703418e11 (diff)
Use GCC's format attribute for al_printf
-rw-r--r--CMakeLists.txt3
-rw-r--r--OpenAL32/Include/alMain.h8
-rw-r--r--config.h.in3
3 files changed, 13 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8c60a11e..1577e054 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -136,6 +136,9 @@ ELSE()
ENDIF()
ENDIF()
+CHECK_C_SOURCE_COMPILES("int foo(const char *str, ...) __attribute__((format(printf, 1, 2)));
+ int main() {return 0;}" HAVE_GCC_FORMAT)
+
CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H)
CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h
index 47f1adfa..48ea9a8a 100644
--- a/OpenAL32/Include/alMain.h
+++ b/OpenAL32/Include/alMain.h
@@ -28,6 +28,12 @@ typedef long long ALint64;
typedef unsigned long long ALuint64;
#endif
+#ifdef HAVE_GCC_FORMAT
+#define PRINTF_STYLE(x, y) __attribute__((format(printf, (x), (y))))
+#else
+#define PRINTF_STYLE(x, y)
+#endif
+
#ifdef _WIN32
#ifndef _WIN32_WINNT
@@ -145,7 +151,7 @@ static inline void Sleep(ALuint t)
extern "C" {
#endif
-static __inline void al_print(const char *fname, unsigned int line, const char *fmt, ...)
+static __inline PRINTF_STYLE(3,4) void al_print(const char *fname, unsigned int line, const char *fmt, ...)
{
const char *fn;
char str[256];
diff --git a/config.h.in b/config.h.in
index 647cfe47..168b403a 100644
--- a/config.h.in
+++ b/config.h.in
@@ -67,6 +67,9 @@
/* Define if we have GCC's destructor attribute */
#cmakedefine HAVE_GCC_DESTRUCTOR
+/* Define if we have GCC's format attribute */
+#cmakedefine HAVE_GCC_FORMAT
+
/* Define if we have pthread_np.h */
#cmakedefine HAVE_PTHREAD_NP_H