X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_common.h;h=a741bfa2467ab35ccebce4019ef70577c8c9b871;hb=6ee1e193fd896ab9a4729fde14f009d9ce629815;hp=79569983c5ed1245cf891b91500ec83d6966aa11;hpb=68aa3ca3202b0f2c7e3b10db9dbe46b436b17bbd;p=vlc diff --git a/include/vlc_common.h b/include/vlc_common.h index 79569983c5..a741bfa246 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -21,7 +21,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /** @@ -57,7 +57,6 @@ #endif #include "vlc_config.h" -#include "modules_inner.h" /***************************************************************************** * Required system headers @@ -65,9 +64,8 @@ #include #include -#ifdef HAVE_STRING_H -# include /* strerror() */ -#endif +#include /* strerror() */ +#include #ifdef HAVE_SYS_TYPES_H # include @@ -193,15 +191,36 @@ typedef uint32_t vlc_fourcc_t; #endif +static inline void __vlc_fourcc_to_char( vlc_fourcc_t fcc, char *psz_fourcc ) +{ +#ifdef WORDS_BIGENDIAN + psz_fourcc[0] = (uint32_t) (fcc >> 24); + psz_fourcc[1] = (uint32_t) (fcc >> 16); + psz_fourcc[2] = (uint32_t) (fcc >> 8); + psz_fourcc[3] = (uint32_t) (fcc); +#else + psz_fourcc[3] = (uint32_t) (fcc >> 24); + psz_fourcc[2] = (uint32_t) (fcc >> 16); + psz_fourcc[1] = (uint32_t) (fcc >> 8); + psz_fourcc[0] = (uint32_t) (fcc); +#endif +} + +#define vlc_fourcc_to_char( a, b ) \ + __vlc_fourcc_to_char( (vlc_fourcc_t)(a), (char *)(b) ) + /***************************************************************************** * Classes declaration *****************************************************************************/ /* Internal types */ -typedef struct libvlc_t libvlc_t; -typedef struct vlc_t vlc_t; +typedef struct libvlc_global_data_t libvlc_global_data_t; +typedef struct libvlc_int_t libvlc_int_t; typedef struct variable_t variable_t; typedef struct date_t date_t; +typedef struct dict_entry_t dict_entry_t; +typedef struct dict_t dict_t; +typedef struct gc_object_t gc_object_t ; /* Messages */ typedef struct msg_bank_t msg_bank_t; @@ -217,14 +236,11 @@ typedef struct msg_subscription_t msg_subscription_t; typedef enum { PLAYLIST_PLAY, /**< No arg. res=can fail*/ PLAYLIST_AUTOPLAY, /**< No arg. res=cant fail*/ - PLAYLIST_VIEWPLAY, /**< arg1= int, arg2= playlist_item_t*,*/ - /** arg3 = playlist_item_t* , res=can fail */ - PLAYLIST_ITEMPLAY, /** +struct _stati64; +#define stat _stati64 +#define fstat _fstati64 +/* You should otherwise use utf8_stat and utf8_lstat. */ +#else +struct stat; +#endif /***************************************************************************** * Variable callbacks @@ -434,11 +485,46 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ /***************************************************************************** * Plug-in stuff *****************************************************************************/ -#ifndef __PLUGIN__ -# define VLC_EXPORT( type, name, args ) type name args + +#include "vlc_modules_macros.h" + +#if defined (WIN32) && defined (DLL_EXPORT) +# ifdef __cplusplus +# define VLC_PUBLIC_API __declspec(dllexport) +# define VLC_PRIVATE_API __declspec(dllexport) +# define VLC_EXPORT( type, name, args ) extern "C" __declspec(dllexport) type name args +# define VLC_INTERNAL( type, name, args ) extern "C" type name args +# else +# define VLC_PUBLIC_API extern __declspec(dllexport) +# define VLC_PRIVATE_API extern __declspec(dllexport) +# define VLC_EXPORT( type, name, args ) __declspec(dllexport) type name args +# define VLC_INTERNAL( type, name, args ) type name args +# endif #else -# define VLC_EXPORT( type, name, args ) struct _u_n_u_s_e_d_ - extern module_symbols_t* p_symbols; +# ifdef __cplusplus +# if HAVE_ATTRIBUTE_VISIBILITY +# define VLC_PUBLIC_API __attribute__((visibility("default"))) +# define VLC_PRIVATE_API __attribute__((visibility("default"))) +# define VLC_EXPORT( type, name, args ) extern "C" __attribute__((visibility("default"))) type name args +# define VLC_INTERNAL( type, name, args ) extern "C" __attribute__((visibility("hidden"))) type name args +# else +# define VLC_PUBLIC_API +# define VLC_EXPORT( type, name, args ) extern "C" type name args +# define VLC_INTERNAL( type, name, args ) extern "C" type name args +# endif +# else +# if HAVE_ATTRIBUTE_VISIBILITY +# define VLC_PUBLIC_API extern __attribute__((visibility("default"))) +# define VLC_PRIVATE_API extern __attribute__((visibility("default"))) +# define VLC_EXPORT( type, name, args ) __attribute__((visibility("default"))) type name args +# define VLC_INTERNAL( type, name, args ) __attribute__((visibility("hidden"))) type name args +# else +# define VLC_PUBLIC_API extern +# define VLC_PRIVATE_API extern +# define VLC_EXPORT( type, name, args ) type name args +# define VLC_INTERNAL( type, name, args ) type name args +# endif +# endif #endif /***************************************************************************** @@ -456,6 +542,8 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ #include "vlc_threads.h" +typedef struct vlc_object_internals_t vlc_object_internals_t; + /***************************************************************************** * Common structure members *****************************************************************************/ @@ -466,14 +554,15 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ * these members are common for all vlc objects \ */ \ /**@{*/ \ + vlc_object_internals_t *p_internals; \ int i_object_id; \ int i_object_type; \ - char *psz_object_type; \ - char *psz_object_name; \ + const char *psz_object_type; \ + const char *psz_object_name; \ \ - /* Thread properties, if any */ \ - vlc_bool_t b_thread; \ - vlc_thread_t thread_id; \ + /* Messages header */ \ + char *psz_header; \ + int i_flags; \ \ /* Object access lock */ \ vlc_mutex_t object_lock; \ @@ -483,17 +572,10 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ volatile vlc_bool_t b_error; /**< set by the object */ \ volatile vlc_bool_t b_die; /**< set by the outside */ \ volatile vlc_bool_t b_dead; /**< set by the object */ \ - volatile vlc_bool_t b_attached; /**< set by the object */ \ vlc_bool_t b_force; /**< set by the outside (eg. module_Need()) */ \ \ - /* Object variables */ \ - vlc_mutex_t var_lock; \ - int i_vars; \ - variable_t * p_vars; \ - \ /* Stuff related to the libvlc structure */ \ - libvlc_t * p_libvlc; /**< root of all evil */ \ - vlc_t * p_vlc; /**< (root of all evil) - 1 */ \ + libvlc_int_t *p_libvlc; /**< (root of all evil) - 1 */ \ \ volatile int i_refcount; /**< usage count */ \ vlc_object_t * p_parent; /**< our parent */ \ @@ -511,6 +593,44 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ #define VLC_OBJECT( x ) \ ((vlc_object_t *)(x))+0*(x)->be_sure_to_add_VLC_COMMON_MEMBERS_to_struct +#define VLC_GC_MEMBERS \ +/** \name VLC_GC_MEMBERS \ + * these members are common to all objects that wish to be garbage-collected \ + */ \ +/**@{*/ \ + int i_gc_refcount; \ + void (*pf_destructor) ( gc_object_t * ); \ + void *p_destructor_arg; \ +/**@}*/ + +struct gc_object_t +{ + VLC_GC_MEMBERS +}; + +static inline void __vlc_gc_incref( gc_object_t * p_gc ) +{ + p_gc->i_gc_refcount ++; +}; + +static inline void __vlc_gc_decref( gc_object_t *p_gc ) +{ + p_gc->i_gc_refcount -- ; + + if( p_gc->i_gc_refcount == 0 ) + { + p_gc->pf_destructor( p_gc ); + /* Do not use the p_gc pointer from now on ! */ + } +} + +#define vlc_gc_incref( a ) __vlc_gc_incref( (gc_object_t *)a ) +#define vlc_gc_decref( a ) __vlc_gc_decref( (gc_object_t *)a ) +#define vlc_gc_init( a,b,c ) { ((gc_object_t *)a)->i_gc_refcount = 0; \ + ((gc_object_t *)a)->pf_destructor = b; \ + ((gc_object_t *)a)->p_destructor_arg = c; } + + /***************************************************************************** * Macros and inline functions *****************************************************************************/ @@ -542,135 +662,76 @@ static int64_t GCD( int64_t a, int64_t b ) else return a; } -/* Dynamic array handling: realloc array, move data, increment position */ -#if defined( _MSC_VER ) && _MSC_VER < 1300 && !defined( UNDER_CE ) -# define VLCCVP (void**) /* Work-around for broken compiler */ -#else -# define VLCCVP -#endif -#define INSERT_ELEM( p_ar, i_oldsize, i_pos, elem ) \ - do \ - { \ - if( !i_oldsize ) (p_ar) = NULL; \ - (p_ar) = VLCCVP realloc( p_ar, ((i_oldsize) + 1) * sizeof(*(p_ar)) ); \ - if( (i_oldsize) - (i_pos) ) \ - { \ - memmove( (p_ar) + (i_pos) + 1, (p_ar) + (i_pos), \ - ((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) ); \ - } \ - (p_ar)[i_pos] = elem; \ - (i_oldsize)++; \ - } \ - while( 0 ) - -#define REMOVE_ELEM( p_ar, i_oldsize, i_pos ) \ - do \ - { \ - if( (i_oldsize) - (i_pos) - 1 ) \ - { \ - memmove( (p_ar) + (i_pos), \ - (p_ar) + (i_pos) + 1, \ - ((i_oldsize) - (i_pos) - 1) * sizeof( *(p_ar) ) ); \ - } \ - if( i_oldsize > 1 ) \ - { \ - (p_ar) = realloc( p_ar, ((i_oldsize) - 1) * sizeof( *(p_ar) ) ); \ - } \ - else \ - { \ - free( p_ar ); \ - (p_ar) = NULL; \ - } \ - (i_oldsize)--; \ - } \ - while( 0 ) - - -#define TAB_APPEND( count, tab, p ) \ - if( (count) > 0 ) \ - { \ - (tab) = realloc( tab, sizeof( void ** ) * ( (count) + 1 ) ); \ - } \ - else \ - { \ - (tab) = malloc( sizeof( void ** ) ); \ - } \ - (tab)[count] = (p); \ - (count)++ - -#define TAB_FIND( count, tab, p, index ) \ - { \ - int _i_; \ - (index) = -1; \ - for( _i_ = 0; _i_ < (count); _i_++ ) \ - { \ - if( (tab)[_i_] == (p) ) \ - { \ - (index) = _i_; \ - break; \ - } \ - } \ - } - -#define TAB_REMOVE( count, tab, p ) \ - { \ - int _i_index_; \ - TAB_FIND( count, tab, p, _i_index_ ); \ - if( _i_index_ >= 0 ) \ - { \ - if( (count) > 1 ) \ - { \ - memmove( ((void**)(tab) + _i_index_), \ - ((void**)(tab) + _i_index_+1), \ - ( (count) - _i_index_ - 1 ) * sizeof( void* ) );\ - } \ - (count)--; \ - if( (count) == 0 ) \ - { \ - free( tab ); \ - (tab) = NULL; \ - } \ - } \ - } +/* function imported from libavutil/common.h */ +static inline uint8_t clip_uint8_vlc( int32_t a ) +{ + if( a&(~255) ) return (-a)>>31; + else return a; +} + +/* Malloc with automatic error */ +#define MALLOC_VOID( var, type ) { var = (type*)malloc( sizeof( type) ); \ + if( !var ) return; } +#define MALLOC_NULL( var, type ) { var = (type*)malloc( sizeof( type) ); \ + if( !var ) return NULL; } +#define MALLOC_ERR( var, type ) { var = (type*)malloc( sizeof( type) ); \ + if( !var ) return VLC_ENOMEM; } +#define MALLOC_GOTOERR( var, type ) { var = (type*)malloc( sizeof( type) ); \ + if( !var ) goto error; } +#define DECMALLOC_VOID( var, type ) type* var = (type*)malloc( sizeof(type) );\ + if( !var ) return; +#define DECMALLOC_ERR( var, type ) type* var = (type*)malloc( sizeof(type) );\ + if( !var ) return VLC_ENOMEM; +#define DECMALLOC_NULL( var, type ) type* var = (type*)malloc( sizeof(type) );\ + if( !var ) return NULL; + +#define FREENULL(a) if( a ) { free( a ); a = NULL; } +#define FREE(a) if( a ) { free( a ); } + +#define EMPTY_STR(str) (!str || !*str) + +VLC_EXPORT( char const *, vlc_error, ( int ) ); + +#include /* MSB (big endian)/LSB (little endian) conversions - network order is always * MSB, and should be used for both network communications and files. Note that * byte orders other than little and big endians are not supported, but only * the VAX seems to have such exotic properties. */ -static inline uint16_t U16_AT( void const * _p ) +static inline uint16_t U16_AT( const void * _p ) { - uint8_t * p = (uint8_t *)_p; + const uint8_t * p = (const uint8_t *)_p; return ( ((uint16_t)p[0] << 8) | p[1] ); } -static inline uint32_t U32_AT( void const * _p ) +static inline uint32_t U32_AT( const void * _p ) { - uint8_t * p = (uint8_t *)_p; + const uint8_t * p = (const uint8_t *)_p; return ( ((uint32_t)p[0] << 24) | ((uint32_t)p[1] << 16) | ((uint32_t)p[2] << 8) | p[3] ); } -static inline uint64_t U64_AT( void const * _p ) +static inline uint64_t U64_AT( const void * _p ) { - uint8_t * p = (uint8_t *)_p; + const uint8_t * p = (const uint8_t *)_p; return ( ((uint64_t)p[0] << 56) | ((uint64_t)p[1] << 48) | ((uint64_t)p[2] << 40) | ((uint64_t)p[3] << 32) | ((uint64_t)p[4] << 24) | ((uint64_t)p[5] << 16) | ((uint64_t)p[6] << 8) | p[7] ); } -static inline uint16_t GetWLE( void const * _p ) +static inline uint16_t GetWLE( const void * _p ) { - uint8_t * p = (uint8_t *)_p; + const uint8_t * p = (const uint8_t *)_p; return ( ((uint16_t)p[1] << 8) | p[0] ); } -static inline uint32_t GetDWLE( void const * _p ) +static inline uint32_t GetDWLE( const void * _p ) { - uint8_t * p = (uint8_t *)_p; + const uint8_t * p = (const uint8_t *)_p; return ( ((uint32_t)p[3] << 24) | ((uint32_t)p[2] << 16) | ((uint32_t)p[1] << 8) | p[0] ); } -static inline uint64_t GetQWLE( void const * _p ) +static inline uint64_t GetQWLE( const void * _p ) { - uint8_t * p = (uint8_t *)_p; + const uint8_t * p = (const uint8_t *)_p; return ( ((uint64_t)p[7] << 56) | ((uint64_t)p[6] << 48) | ((uint64_t)p[5] << 40) | ((uint64_t)p[4] << 32) | ((uint64_t)p[3] << 24) | ((uint64_t)p[2] << 16) @@ -682,14 +743,14 @@ static inline uint64_t GetQWLE( void const * _p ) #define GetQWBE( p ) U64_AT( p ) /* Helper writer functions */ -#define SetWLE( p, v ) _SetWLE( (uint8_t*)p, v) +#define SetWLE( p, v ) _SetWLE( (uint8_t*)(p), v) static inline void _SetWLE( uint8_t *p, uint16_t i_dw ) { p[1] = ( i_dw >> 8 )&0xff; p[0] = ( i_dw )&0xff; } -#define SetDWLE( p, v ) _SetDWLE( (uint8_t*)p, v) +#define SetDWLE( p, v ) _SetDWLE( (uint8_t*)(p), v) static inline void _SetDWLE( uint8_t *p, uint32_t i_dw ) { p[3] = ( i_dw >> 24 )&0xff; @@ -697,20 +758,20 @@ static inline void _SetDWLE( uint8_t *p, uint32_t i_dw ) p[1] = ( i_dw >> 8 )&0xff; p[0] = ( i_dw )&0xff; } -#define SetQWLE( p, v ) _SetQWLE( (uint8_t*)p, v) +#define SetQWLE( p, v ) _SetQWLE( (uint8_t*)(p), v) static inline void _SetQWLE( uint8_t *p, uint64_t i_qw ) { SetDWLE( p, i_qw&0xffffffff ); SetDWLE( p+4, ( i_qw >> 32)&0xffffffff ); } -#define SetWBE( p, v ) _SetWBE( (uint8_t*)p, v) +#define SetWBE( p, v ) _SetWBE( (uint8_t*)(p), v) static inline void _SetWBE( uint8_t *p, uint16_t i_dw ) { p[0] = ( i_dw >> 8 )&0xff; p[1] = ( i_dw )&0xff; } -#define SetDWBE( p, v ) _SetDWBE( (uint8_t*)p, v) +#define SetDWBE( p, v ) _SetDWBE( (uint8_t*)(p), v) static inline void _SetDWBE( uint8_t *p, uint32_t i_dw ) { p[0] = ( i_dw >> 24 )&0xff; @@ -718,14 +779,14 @@ static inline void _SetDWBE( uint8_t *p, uint32_t i_dw ) p[2] = ( i_dw >> 8 )&0xff; p[3] = ( i_dw )&0xff; } -#define SetQWBE( p, v ) _SetQWBE( (uint8_t*)p, v) +#define SetQWBE( p, v ) _SetQWBE( (uint8_t*)(p), v) static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) { SetDWBE( p+4, i_qw&0xffffffff ); SetDWBE( p, ( i_qw >> 32)&0xffffffff ); } -#if WORDS_BIGENDIAN +#ifdef WORDS_BIGENDIAN # define hton16(i) ( i ) # define hton32(i) ( i ) # define hton64(i) ( i ) @@ -791,14 +852,14 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) # define vlc_strdup NULL #endif -#if !defined(HAVE_VASPRINTF) || defined(SYS_DARWIN) || defined(SYS_BEOS) +#if !defined(HAVE_VASPRINTF) || defined(__APPLE__) || defined(SYS_BEOS) # define vasprintf vlc_vasprintf VLC_EXPORT( int, vlc_vasprintf, (char **, const char *, va_list ) ); #elif !defined(__PLUGIN__) # define vlc_vasprintf NULL #endif -#if !defined(HAVE_ASPRINTF) || defined(SYS_DARWIN) || defined(SYS_BEOS) +#if !defined(HAVE_ASPRINTF) || defined(__APPLE__) || defined(SYS_BEOS) # define asprintf vlc_asprintf VLC_EXPORT( int, vlc_asprintf, (char **, const char *, ... ) ); #elif !defined(__PLUGIN__) @@ -818,6 +879,20 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) # define vlc_strndup NULL #endif +#ifndef HAVE_STRNLEN +# define strnlen vlc_strnlen + VLC_EXPORT( size_t, vlc_strnlen, ( const char *, size_t ) ); +#elif !defined(__PLUGIN__) +# define vlc_strnlen NULL +#endif + +#ifndef HAVE_STRLCPY +# define strlcpy vlc_strlcpy + VLC_EXPORT( size_t, vlc_strlcpy, ( char *, const char *, size_t ) ); +#elif !defined(__PLUGIN__) +# define vlc_strlcpy NULL +#endif + #ifndef HAVE_ATOF # define atof vlc_atof VLC_EXPORT( double, vlc_atof, ( const char *nptr ) ); @@ -845,6 +920,18 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) # define vlc_strtoll NULL #endif +#if defined(SYS_BEOS) \ + || (defined (__FreeBSD__) && (__FreeBSD__ < 5)) + typedef struct { + long long quot; /* Quotient. */ + long long rem; /* Remainder. */ + } lldiv_t; +# define lldiv vlc_lldiv + VLC_EXPORT( lldiv_t, vlc_lldiv, ( long long numer, long long denom ) ); +#elif !defined(__PLUGIN__) +# define vlc_lldiv NULL +#endif + #ifndef HAVE_SCANDIR # define scandir vlc_scandir # define alphasort vlc_alphasort @@ -920,11 +1007,16 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) # define opendir vlc_opendir # define readdir vlc_readdir # define closedir vlc_closedir +# define rewinddir vlc_rewindir +# define seekdir vlc_seekdir +# define telldir vlc_telldir VLC_EXPORT( void *, vlc_opendir, ( const char * ) ); VLC_EXPORT( void *, vlc_readdir, ( void * ) ); VLC_EXPORT( int, vlc_closedir, ( void * ) ); + VLC_INTERNAL( void, vlc_rewinddir, ( void * ) ); + VLC_INTERNAL( void, vlc_seekdir, ( void *, long ) ); + VLC_INTERNAL( long, vlc_telldir, ( void * ) ); #else - struct dirent; /* forward declaration for vlc_symbols.h */ # if !defined(__PLUGIN__) # define vlc_opendir NULL # define vlc_readdir NULL @@ -932,9 +1024,26 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) # endif #endif - VLC_EXPORT( void *, vlc_opendir_wrapper, ( const char * ) ); - VLC_EXPORT( struct dirent *, vlc_readdir_wrapper, ( void * ) ); - VLC_EXPORT( int, vlc_closedir_wrapper, ( void * ) ); +#if defined (WIN32) +# include +VLC_INTERNAL( void *, vlc_wopendir, ( const wchar_t * ) ); +VLC_INTERNAL( struct _wdirent *, vlc_wreaddir, ( void * ) ); +VLC_EXPORT( int, vlc_wclosedir, ( void * ) ); +VLC_INTERNAL( void, vlc_rewinddir, ( void * ) ); +VLC_INTERNAL( void, vlc_seekdir, ( void *, long ) ); +VLC_INTERNAL( long, vlc_telldir, ( void * ) ); +# define opendir Use_utf8_opendir_or_vlc_wopendir_instead! +# define readdir Use_utf8_readdir_or_vlc_wreaddir_instead! +# define closedir vlc_wclosedir +# define _wopendir vlc_wopendir +# define _wreaddir vlc_wreaddir +# define _wclosedir vlc_wclosedir +# define rewinddir vlc_rewinddir +# define seekdir vlc_seekdir +# define telldir vlc_telldir +#elif !defined(__PLUGIN__) +# define vlc_wclosedir NULL +#endif /* Format type specifiers for 64 bits numbers */ #if defined(__CYGWIN32__) || (!defined(WIN32) && !defined(UNDER_CE)) @@ -1041,16 +1150,16 @@ VLC_EXPORT( char **, vlc_parse_cmdline, ( const char *, int * ) ); /* vlc_wraptext (defined in src/extras/libc.c) */ #define wraptext vlc_wraptext -VLC_EXPORT( char *, vlc_wraptext, ( const char *, int, vlc_bool_t ) ); +VLC_EXPORT( char *, vlc_wraptext, ( const char *, int ) ); /* 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 * ) ); -VLC_EXPORT( size_t, vlc_iconv, ( vlc_iconv_t, char **, size_t *, char **, size_t * ) ); +VLC_EXPORT( size_t, vlc_iconv, ( vlc_iconv_t, const char **, size_t *, char **, size_t * ) ); VLC_EXPORT( int, vlc_iconv_close, ( vlc_iconv_t ) ); /* execve wrapper (defined in src/extras/libc.c) */ -VLC_EXPORT( int, __vlc_execve, ( vlc_object_t *p_object, int i_argc, char **pp_argv, char **pp_env, char *psz_cwd, char *p_in, int i_in, char **pp_data, int *pi_data ) ); +VLC_EXPORT( int, __vlc_execve, ( vlc_object_t *p_object, int i_argc, char *const *pp_argv, char *const *pp_env, const char *psz_cwd, const char *p_in, size_t i_in, char **pp_data, size_t *pi_data ) ); #define vlc_execve(a,b,c,d,e,f,g,h,i) __vlc_execve(VLC_OBJECT(a),b,c,d,e,f,g,h,i) /***************************************************************************** @@ -1067,11 +1176,14 @@ VLC_EXPORT( int, __vlc_execve, ( vlc_object_t *p_object, int i_argc, char **pp_a #define CPU_CAPABILITY_SSE2 (1<<7) #define CPU_CAPABILITY_ALTIVEC (1<<16) #define CPU_CAPABILITY_FPU (1<<31) +VLC_EXPORT( unsigned, vlc_CPU, ( void ) ); /***************************************************************************** * I18n stuff *****************************************************************************/ +#ifdef WIN32 VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) ); +#endif #if defined( ENABLE_NLS ) && \ (defined(MODULE_NAME_IS_gnome)||defined(MODULE_NAME_IS_gnome_main)||\ @@ -1085,11 +1197,15 @@ VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) ); # include # endif # undef _ -# define _(String) vlc_dgettext (PACKAGE_NAME, String) -# define N_(String) ((char*)(String)) +# ifdef WIN32 +# define _(String) vlc_dgettext (PACKAGE_NAME, String) +# else +# define _(String) dgettext(PACKAGE_NAME, String) +# endif +# define N_(String) (String) #else -# define _(String) ((char*)(String)) -# define N_(String) ((char*)(String)) +# define _(String) (String) +# define N_(String) (String) #endif /***************************************************************************** @@ -1100,25 +1216,39 @@ VLC_EXPORT( const char *, VLC_CompileBy, ( void ) ); VLC_EXPORT( const char *, VLC_CompileHost, ( void ) ); VLC_EXPORT( const char *, VLC_CompileDomain, ( void ) ); VLC_EXPORT( const char *, VLC_Compiler, ( void ) ); -VLC_EXPORT( const char *, VLC_Changeset, ( void ) ); VLC_EXPORT( const char *, VLC_Error, ( int ) ); +VLC_EXPORT( const char *, VLC_Changeset, ( void ) ); /***************************************************************************** * Additional vlc stuff *****************************************************************************/ -#include "vlc_symbols.h" -#include "os_specific.h" +#include "vlc_os_specific.h" #include "vlc_messages.h" -#include "variables.h" +#include "vlc_variables.h" #include "vlc_objects.h" #include "vlc_threads_funcs.h" -#include "mtime.h" -#include "modules.h" +#include "vlc_mtime.h" +#include "vlc_modules.h" #include "main.h" -#include "configuration.h" +#include "vlc_configuration.h" + +/** The global thread var for msg stack context + * We store this as a static global variable so we don't need a vlc_object_t + * everywhere. + * This key is created in vlc_threads_init and is therefore ready to use at + * the very beginning of the universe */ +extern vlc_threadvar_t msg_context_global_key; + #if defined( __BORLANDC__ ) # undef PACKAGE # define PACKAGE #endif +#if defined( WIN32 ) || defined( UNDER_CE ) +# define DIR_SEP_CHAR '\\' +# define DIR_SEP "\\" +#else +# define DIR_SEP_CHAR '/' +# define DIR_SEP "/" +#endif