From a6c4f2646fda50e5661acdb8739d1b54ddb38ede Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 10 Nov 2012 16:19:53 +0100 Subject: mp_common.h: split parts into mp_talloc.h and compiler.h Put MP_EXPAND_ARGS() in compiler.h, even though it's not compiler dependent. Both mp_talloc.h and mp_common.h need it, while mp_common.h includes mp_talloc.h. This is the least annoying solution. --- core/mp_common.h | 52 +++------------------------------------------------- 1 file changed, 3 insertions(+), 49 deletions(-) (limited to 'core/mp_common.h') diff --git a/core/mp_common.h b/core/mp_common.h index 119f11fb3b..4abbe70caf 100644 --- a/core/mp_common.h +++ b/core/mp_common.h @@ -22,60 +22,14 @@ #include #include +#include "compat/compiler.h" +#include "core/mp_talloc.h" + // both int64_t and double should be able to represent this exactly #define MP_NOPTS_VALUE (-1LL<<63) #define ROUND(x) ((int)((x) < 0 ? (x) - 0.5 : (x) + 0.5)) -#define MP_EXPAND_ARGS(...) __VA_ARGS__ - -#define MP_TALLOC_ELEMS(p) (talloc_get_size(p) / sizeof((p)[0])) -#define MP_GROW_ARRAY(p, nextidx) do { \ - if ((nextidx) == MP_TALLOC_ELEMS(p)) \ - p = talloc_realloc_size(NULL, p, talloc_get_size(p) * 2); } while (0) -#define MP_RESIZE_ARRAY(ctx, p, count) do { \ - p = talloc_realloc_size((ctx), p, (count) * sizeof(p[0])); } while (0) - - -#define MP_TARRAY_GROW(ctx, p, nextidx) \ - do { \ - size_t nextidx_ = (nextidx); \ - size_t nelems_ = MP_TALLOC_ELEMS(p); \ - if (nextidx_ >= nelems_) \ - p = talloc_realloc_size((ctx), p, \ - (nextidx_ + 1) * sizeof((p)[0]) * 2);\ - } while (0) - -#define MP_TARRAY_APPEND(ctx, p, idxvar, ...) \ - do { \ - MP_TARRAY_GROW(ctx, p, idxvar); \ - p[idxvar] = (MP_EXPAND_ARGS(__VA_ARGS__)); \ - idxvar++; \ - } while (0) - -#define talloc_struct(ctx, type, ...) \ - talloc_memdup(ctx, &(type) MP_EXPAND_ARGS(__VA_ARGS__), sizeof(type)) - -#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; char *mp_format_time(double time, bool fractions); -- cgit v1.2.3