X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_common.h;h=0aef0661c678bbcff967f656ff951335aeb798a5;hb=a8a47dd1bae256f55201fc70c93b2917af1d6d55;hp=617ccbc6d277b8e604d291933cbcb065fc65e100;hpb=6c1ee3a269cd6496fe59aeb3f93f6448af387de3;p=vlc diff --git a/include/vlc_common.h b/include/vlc_common.h index 617ccbc6d2..0aef0661c6 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 @@ -198,13 +197,17 @@ typedef uint32_t vlc_fourcc_t; *****************************************************************************/ /* 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; +typedef struct msg_queue_t msg_queue_t; typedef struct msg_subscription_t msg_subscription_t; /* Playlist */ @@ -216,14 +219,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 @@ -427,11 +468,48 @@ 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_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_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; +# if !defined (__PLUGIN__) || defined (HAVE_SHARED_LIBVLC) +# ifdef __cplusplus +# if HAVE_ATTRIBUTE_VISIBILITY +# define VLC_PUBLIC_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_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_EXPORT( type, name, args ) type name args +# define VLC_INTERNAL( type, name, args ) type name args +# endif +# endif +# else +# define VLC_PUBLIC_API +# define VLC_EXPORT( type, name, args ) struct _u_n_u_s_e_d_ +# define VLC_INTERNAL( type, name, args ) struct _u_n_u_s_e_d_ + extern module_symbols_t* p_symbols; +# endif #endif /***************************************************************************** @@ -461,8 +539,12 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ /**@{*/ \ 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; \ + \ + /* Messages header */ \ + char *psz_header; \ + int i_flags; \ \ /* Thread properties, if any */ \ vlc_bool_t b_thread; \ @@ -485,8 +567,8 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ 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 */ \ + vlc_object_t *p_libvlc_global; /**< root of all evil */ \ + libvlc_int_t *p_libvlc; /**< (root of all evil) - 1 */ \ \ volatile int i_refcount; /**< usage count */ \ vlc_object_t * p_parent; /**< our parent */ \ @@ -504,6 +586,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 *****************************************************************************/ @@ -535,135 +655,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 -# 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) @@ -675,14 +736,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; @@ -690,20 +751,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; @@ -711,14 +772,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 ) @@ -784,14 +845,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__) @@ -811,6 +872,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 ) ); @@ -838,6 +913,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 @@ -913,13 +1000,43 @@ 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 +# define vlc_closedir NULL +# endif +#endif + +#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_opendir NULL -# define vlc_readdir NULL -# define vlc_closedir NULL +# define vlc_wclosedir NULL #endif /* Format type specifiers for 64 bits numbers */ @@ -977,8 +1094,8 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) /* several type definitions */ # if defined( __MINGW32__ ) # if !defined( _OFF_T_ ) -typedef long long _off_t; -typedef _off_t off_t; + typedef long long _off_t; + typedef _off_t off_t; # define _OFF_T_ # else # ifdef off_t @@ -988,17 +1105,15 @@ typedef _off_t off_t; # endif # endif -/* -# if (defined( _MSC_VER ) && (!defined(__WXMSW__))) +# if defined( _MSC_VER ) && !defined( __WXMSW__ ) # if !defined( _OFF_T_DEFINED ) -typedef __int64 off_t; + typedef __int64 off_t; # define _OFF_T_DEFINED # else + /* for wx compatibility typedef long off_t; */ # define off_t __int64 - // for wx compatibility typedef long off_t; # endif # endif -*/ # if defined( __BORLANDC__ ) # undef off_t @@ -1029,14 +1144,18 @@ 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 *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) + /***************************************************************************** * CPU capabilities *****************************************************************************/ @@ -1051,11 +1170,14 @@ VLC_EXPORT( int, vlc_iconv_close, ( vlc_iconv_t ) ); #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 *****************************************************************************/ +#if defined (WIN32) || !defined (HAVE_SHARED_LIBVLC) 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)||\ @@ -1069,29 +1191,64 @@ 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)) +# if defined (WIN32) || !defined (HAVE_SHARED_LIBVLC) +# 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 +/***************************************************************************** + * libvlc features + *****************************************************************************/ +VLC_EXPORT( const char *, VLC_Version, ( void ) ); +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_Error, ( int ) ); +VLC_EXPORT( const char *, VLC_Changeset, ( void ) ); + /***************************************************************************** * Additional vlc stuff *****************************************************************************/ -#include "vlc_symbols.h" -#include "os_specific.h" +#ifndef HAVE_SHARED_LIBVLC +# ifdef HAVE_DIRENT_H +# include /* for DIR typedef in vlc_symbols.h */ +# endif +# include "vlc_symbols.h" +#endif +#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