# 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_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
/*****************************************************************************
typedef struct playlist_t playlist_t;
typedef struct playlist_item_t playlist_item_t;
typedef struct playlist_view_t playlist_view_t;
-typedef struct playlist_export_t playlist_export_t;
typedef struct services_discovery_t services_discovery_t;
typedef struct services_discovery_sys_t services_discovery_sys_t;
typedef struct playlist_add_t playlist_add_t;
typedef struct config_category_t config_category_t;
-/* Interface */
-typedef struct intf_thread_t intf_thread_t;
-typedef struct intf_sys_t intf_sys_t;
-typedef struct intf_msg_t intf_msg_t;
-typedef struct interaction_t interaction_t;
-typedef struct interaction_dialog_t interaction_dialog_t;
-typedef struct user_widget_t user_widget_t;
-
/* Input */
typedef struct input_thread_t input_thread_t;
typedef struct input_thread_sys_t input_thread_sys_t;
typedef struct stream_t stream_t;
typedef struct stream_sys_t stream_sys_t;
typedef struct demux_t demux_t;
-typedef struct demux_meta_t demux_meta_t;
typedef struct demux_sys_t demux_sys_t;
typedef struct es_out_t es_out_t;
typedef struct es_out_id_t es_out_id_t;
typedef struct aout_sys_t aout_sys_t;
typedef struct aout_fifo_t aout_fifo_t;
typedef struct aout_input_t aout_input_t;
-typedef struct aout_buffer_t aout_buffer_t;
+typedef struct block_t aout_buffer_t;
typedef audio_format_t audio_sample_format_t;
typedef struct audio_date_t audio_date_t;
typedef struct aout_filter_t aout_filter_t;
typedef struct vlm_t vlm_t;
typedef struct vlm_message_t vlm_message_t;
-/* divers */
+/* misc */
typedef struct vlc_meta_t vlc_meta_t;
-typedef struct meta_export_t meta_export_t;
/* Stats */
typedef struct counter_t counter_t;
*****************************************************************************/
#define VLC_SUCCESS -0 /* No error */
#define VLC_ENOMEM -1 /* Not enough memory */
-#define VLC_ETHREAD -2 /* Thread error */
#define VLC_ETIMEOUT -3 /* Timeout */
#define VLC_ENOMOD -10 /* Module not found */
*/ \
/**@{*/ \
const char *psz_object_type; \
- char *psz_object_name; \
\
/* Messages header */ \
char *psz_header; \
\
vlc_object_t * p_parent; /**< our parent */ \
\
- /* Private data */ \
- void * p_private; \
- \
/**@}*/ \
/* 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
#define VLC_UNUSED(x) (void)(x)
/* Stuff defined in src/extras/libc.c */
-VLC_EXPORT( size_t, vlc_strlcpy, ( char *, const char *, size_t ) );
-VLC_EXPORT( long long, vlc_strtoll, ( const char *nptr, char **endptr, int base ) LIBVLC_USED );
-
-VLC_EXPORT( char *, vlc_strcasestr, ( const char *s1, const char *s2 ) LIBVLC_USED );
#if defined(WIN32) || defined(UNDER_CE)
/* win32, cl and icl support */
# ifndef alloca
# define alloca _alloca
-# endif
-
- /* These two are not defined in mingw32 (bug?) */
-# ifndef snprintf
-# define snprintf _snprintf
-# endif
-# ifndef vsnprintf
-# define vsnprintf _vsnprintf
# endif
# include <tchar.h>
VLC_EXPORT( bool, vlc_ureduce, ( unsigned *, unsigned *, uint64_t, uint64_t, uint64_t ) );
-/* vlc_wraptext (defined in src/extras/libc.c) */
-#define wraptext vlc_wraptext
-VLC_EXPORT( char *, vlc_wraptext, ( const char *, int ) LIBVLC_USED );
-
/* iconv wrappers (defined in src/extras/libc.c) */
typedef void *vlc_iconv_t;
VLC_EXPORT( vlc_iconv_t, vlc_iconv_open, ( const char *, const char * ) LIBVLC_USED );
/* dir wrappers (defined in src/extras/libc.c) */
VLC_EXPORT(int, vlc_wclosedir, ( void *_p_dir ));
-/*****************************************************************************
- * CPU capabilities
- *****************************************************************************/
-#define CPU_CAPABILITY_NONE 0
-#define CPU_CAPABILITY_486 (1<<0)
-#define CPU_CAPABILITY_586 (1<<1)
-#define CPU_CAPABILITY_PPRO (1<<2)
-#define CPU_CAPABILITY_MMX (1<<3)
-#define CPU_CAPABILITY_3DNOW (1<<4)
-#define CPU_CAPABILITY_MMXEXT (1<<5)
-#define CPU_CAPABILITY_SSE (1<<6)
-#define CPU_CAPABILITY_SSE2 (1<<7)
-#define CPU_CAPABILITY_ALTIVEC (1<<16)
-#define CPU_CAPABILITY_FPU (1<<31)
-VLC_EXPORT( unsigned, vlc_CPU, ( void ) );
-
-typedef void *(*vlc_memcpy_t) (void *tgt, const void *src, size_t n);
-typedef void *(*vlc_memset_t) (void *tgt, int c, size_t n);
-
-VLC_EXPORT( void, vlc_fastmem_register, (vlc_memcpy_t cpy, vlc_memset_t set) );
+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_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