summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mp_msg.h12
-rw-r--r--mpcommon.h20
-rw-r--r--talloc.h14
3 files changed, 26 insertions, 20 deletions
diff --git a/mp_msg.h b/mp_msg.h
index 6e800aecf2..686ed8316c 100644
--- a/mp_msg.h
+++ b/mp_msg.h
@@ -130,19 +130,15 @@ void mp_msg_init(void);
int mp_msg_test(int mod, int lev);
#include "config.h"
+#include "mpcommon.h"
char *mp_gtext(const char *string);
void mp_msg_va(int mod, int lev, const char *format, va_list va);
-#ifdef __GNUC__
-void mp_msg(int mod, int lev, const char *format, ... ) __attribute__ ((format (printf, 3, 4)));
-void mp_tmsg(int mod, int lev, const char *format, ... ) __attribute__ ((format (printf, 3, 4)));
-static inline void mp_dbg(int mod, int lev, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
-#else // not GNU C
-void mp_msg(int mod, int lev, const char *format, ... );
-void mp_tmsg(int mod, int lev, const char *format, ...)
-#endif /* __GNUC__ */
+void mp_msg(int mod, int lev, const char *format, ... ) PRINTF_ATTRIBUTE(3, 4);
+void mp_tmsg(int mod, int lev, const char *format, ... ) PRINTF_ATTRIBUTE(3, 4);
+static inline void mp_dbg(int mod, int lev, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
static inline void mp_dbg(int mod, int lev, const char *format, ...)
{
diff --git a/mpcommon.h b/mpcommon.h
index fd520eacf6..2ff66fed40 100644
--- a/mpcommon.h
+++ b/mpcommon.h
@@ -31,6 +31,26 @@
#define MP_RESIZE_ARRAY(ctx, p, count) do { \
p = talloc_realloc_size((ctx), p, (count) * sizeof(p[0])); } while (0)
+#ifdef __GNUC__
+
+/** Use gcc attribute to check printf fns. a1 is the 1-based index of
+ * the parameter containing the format, and a2 the index of the first
+ * argument. **/
+#ifdef __MINGW32__
+// MinGW maps "printf" to the non-standard MSVCRT functions, even if
+// __USE_MINGW_ANSI_STDIO is defined and set to 1. We need to use "gnu_printf",
+// which isn't necessarily available on other GCC compatible compilers.
+#define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (gnu_printf, a1, a2)))
+#else
+#define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (printf, a1, a2)))
+#endif
+
+#else
+
+#define PRINTF_ATTRIBUTE(a1, a2)
+
+#endif
+
extern const char *mplayer_version;
#endif /* MPLAYER_MPCOMMON_H */
diff --git a/talloc.h b/talloc.h
index b60e0fb040..e98dbae902 100644
--- a/talloc.h
+++ b/talloc.h
@@ -29,6 +29,8 @@
#include <stdio.h>
#include <stdarg.h>
+#include "mpcommon.h"
+
/* HACK: libsmbclient uses dynamically linked libtalloc.so which has
* identically named symbols. This name collision caused a crash under
* stream_smb when trying to play anything with smb://. This hack
@@ -54,18 +56,6 @@ typedef void TALLOC_CTX;
#define TALLOC_DEPRECATED 0
#endif
-#ifndef PRINTF_ATTRIBUTE
-#if (__GNUC__ >= 3)
-/** Use gcc attribute to check printf fns. a1 is the 1-based index of
- * the parameter containing the format, and a2 the index of the first
- * argument. Note that some gcc 2.x versions don't handle this
- * properly **/
-#define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
-#else
-#define PRINTF_ATTRIBUTE(a1, a2)
-#endif
-#endif
-
/* try to make talloc_set_destructor() and talloc_steal() type safe,
if we have a recent gcc */
#if (__GNUC__ >= 3)