* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-
/**
* \file
* This file is a collection of common definitions and types
typedef struct services_discovery_sys_t services_discovery_sys_t;
typedef struct playlist_add_t playlist_add_t;
typedef struct playlist_preparse_t playlist_preparse_t;
-typedef struct playlist_secondary_preparse_t playlist_secondary_preparse_t;
+typedef struct playlist_fetcher_t playlist_fetcher_t;
/* Modules */
typedef struct module_bank_t module_bank_t;
typedef struct seekpoint_t seekpoint_t;
typedef struct info_t info_t;
typedef struct info_category_t info_category_t;
+typedef struct input_attachment_t input_attachment_t;
/* Format */
typedef struct audio_format_t audio_format_t;
/* VLM */
typedef struct vlm_t vlm_t;
typedef struct vlm_message_t vlm_message_t;
-typedef struct vlm_media_t vlm_media_t;
-typedef struct vlm_schedule_t vlm_schedule_t;
/* divers */
typedef struct vlc_meta_t vlc_meta_t;
/* Meta engine */
typedef struct meta_engine_t meta_engine_t;
+/* stat/lstat/fstat */
+#ifdef WIN32
+#include <sys/stat.h>
+struct _stati64;
+#define stat _stati64
+#define fstat _fstati64
+/* You should otherwise use utf8_stat and utf8_lstat. */
+#else
+struct stat;
+#endif
+
/*****************************************************************************
* Variable callbacks
*****************************************************************************/
* Plug-in stuff
*****************************************************************************/
-#include "modules_inner.h"
-
-#if !defined (__PLUGIN__) || defined (HAVE_SHARED_LIBVLC)
-# ifdef __cplusplus
-# define VLC_EXPORT( type, name, args ) extern "C" type name args
-# else
-# define VLC_EXPORT( type, name, args ) type name args
-# endif
+#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
/*****************************************************************************
variable_t * p_vars; \
\
/* Stuff related to the libvlc structure */ \
- libvlc_global_data_t *p_libvlc_global; /**< root of all evil */ \
+ 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 */ \
else return a;
}
+/* 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 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 <vlc_arrays.h>
/* 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)
#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;
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;
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 );
# 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 ) );
# define vlc_strtoll NULL
#endif
-#if defined(SYS_BEOS)
+#if defined(SYS_BEOS) \
+ || (defined (__FreeBSD__) && (__FreeBSD__ < 5))
typedef struct {
long long quot; /* Quotient. */
long long rem; /* Remainder. */
# 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__)
# 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 <dirent.h>
+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))
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)
/*****************************************************************************
#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
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
*****************************************************************************/
#ifndef HAVE_SHARED_LIBVLC
-VLC_EXPORT( const char *, VLC_Changeset, ( void ) );
+# ifdef HAVE_DIRENT_H
+# include <dirent.h> /* for DIR typedef in vlc_symbols.h */
+# endif
# include "vlc_symbols.h"
-#else
-# define VLC_Changeset( ) ("exported")
#endif
-#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