# include <stdbool.h>
#endif
+/* 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__
-# define LIBVLC_FORMAT(x,y) __attribute__ ((format(printf,x,y)))
+# 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
/*****************************************************************************
/* VLC_OBJECT: attempt at doing a clever cast */
#ifdef __GNUC__
# define VLC_OBJECT( x ) \
- (((vlc_object_t *)(x))+0*(((typeof(x))0)->be_sure_to_add_VLC_COMMON_MEMBERS_to_struct))
+ (((vlc_object_t *)(x))+0*(((__typeof__(x))0)->be_sure_to_add_VLC_COMMON_MEMBERS_to_struct))
#else
# define VLC_OBJECT( x ) ((vlc_object_t *)(x))
#endif
/* dir wrappers (defined in src/extras/libc.c) */
VLC_EXPORT(int, vlc_wclosedir, ( void *_p_dir ));
+VLC_EXPORT( void, vlc_tdestroy, ( void *, void (*)(void *) ) );
+
/* Fast large memory copy and memory set */
VLC_EXPORT( void *, vlc_memcpy, ( void *, const void *, size_t ) );
VLC_EXPORT( void *, vlc_memset, ( void *, int, size_t ) );
/*****************************************************************************
* I18n stuff
*****************************************************************************/
-VLC_EXPORT( char *, vlc_gettext, ( const char *msgid ) LIBVLC_USED );
+VLC_EXPORT( char *, vlc_gettext, ( const char *msgid ) LIBVLC_FORMAT_ARG(1) );
+LIBVLC_FORMAT_ARG(2)
static inline const char *vlc_pgettext( const char *ctx, const char *id )
{
const char *tr = vlc_gettext( id );
return (tr == ctx) ? id : tr;
}
+/*****************************************************************************
+ * Loosy memory allocation functions. Do not use in new code.
+ *****************************************************************************/
+static inline void *xmalloc (size_t len)
+{
+ void *ptr = malloc (len);
+ if (unlikely (ptr == NULL))
+ abort ();
+ return ptr;
+}
+
+static inline void *xrealloc (void *ptr, size_t len)
+{
+ void *nptr = realloc (ptr, len);
+ if (unlikely (nptr == NULL))
+ abort ();
+ return nptr;
+}
+
/*****************************************************************************
* libvlc features
*****************************************************************************/
VLC_EXPORT( const char *, VLC_Version, ( void ) LIBVLC_USED );
VLC_EXPORT( const char *, VLC_CompileBy, ( void ) LIBVLC_USED );
VLC_EXPORT( const char *, VLC_CompileHost, ( void ) LIBVLC_USED );
-VLC_EXPORT( const char *, VLC_CompileDomain, ( void ) LIBVLC_USED );
VLC_EXPORT( const char *, VLC_Compiler, ( void ) LIBVLC_USED );
-VLC_EXPORT( const char *, VLC_Error, ( int ) LIBVLC_USED );
/*****************************************************************************
* Additional vlc stuff