+/* Try to fix format strings for all versions of mingw and mingw64 */
+#if defined( _WIN32 ) && defined( __USE_MINGW_ANSI_STDIO )
+ #undef PRId64
+ #define PRId64 "lld"
+ #undef PRIi64
+ #define PRIi64 "lli"
+ #undef PRIu64
+ #define PRIu64 "llu"
+ #undef PRIo64
+ #define PRIo64 "llo"
+ #undef PRIx64
+ #define PRIx64 "llx"
+ #define snprintf __mingw_snprintf
+ #define vsnprintf __mingw_vsnprintf
+#endif
+
+/* Format string sanity checks */
+#ifdef __GNUC__
+# if defined( _WIN32 ) && (__GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 4 ) )
+# define LIBVLC_FORMAT(x,y) __attribute__ ((format(gnu_printf,x,y)))
+# else
+# define LIBVLC_FORMAT(x,y) __attribute__ ((format(printf,x,y)))
+# endif
+# define LIBVLC_FORMAT_ARG(x) __attribute__ ((format_arg(x)))
+# define LIBVLC_USED __attribute__ ((warn_unused_result))
+# define LIBVLC_MALLOC __attribute__ ((malloc))
+#else
+# define LIBVLC_FORMAT(x,y)
+# define LIBVLC_FORMAT_ARG(x)
+# define LIBVLC_USED
+# define LIBVLC_MALLOC
+#endif
+
+/* Branch prediction */
+#ifdef __GNUC__
+# define likely(p) __builtin_expect(!!(p), 1)
+# define unlikely(p) __builtin_expect(!!(p), 0)
+#else
+# define likely(p) (!!(p))
+# define unlikely(p) (!!(p))
+#endif
+