]> git.sesse.net Git - vlc/blobdiff - include/vlc_common.h
Removes trailing spaces. Removes tabs.
[vlc] / include / vlc_common.h
index 647b8c2f28910717ca102c79eb2b9caaf6c75027..a741bfa2467ab35ccebce4019ef70577c8c9b871 100644 (file)
@@ -24,7 +24,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
-
 /**
  * \file
  * This file is a collection of common definitions and types
@@ -58,7 +57,6 @@
 #endif
 
 #include "vlc_config.h"
-#include "modules_inner.h"
 
 /*****************************************************************************
  * Required system headers
@@ -66,9 +64,8 @@
 #include <stdlib.h>
 #include <stdarg.h>
 
-#ifdef HAVE_STRING_H
-#   include <string.h>                                         /* strerror() */
-#endif
+#include <string.h>                                         /* strerror() */
+#include <stdio.h>
 
 #ifdef HAVE_SYS_TYPES_H
 #   include <sys/types.h>
@@ -194,6 +191,24 @@ 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
  *****************************************************************************/
@@ -237,7 +252,7 @@ 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 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;
@@ -274,6 +289,7 @@ typedef struct es_descriptor_t es_descriptor_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;
@@ -384,7 +400,7 @@ typedef struct httpd_url_t      httpd_url_t;
 typedef struct httpd_client_t   httpd_client_t;
 typedef struct httpd_callback_sys_t httpd_callback_sys_t;
 typedef struct httpd_message_t  httpd_message_t;
-typedef int    (*httpd_callback_t)( httpd_callback_sys_t *, httpd_client_t *, httpd_message_t *answer, httpd_message_t *query );
+typedef int    (*httpd_callback_t)( httpd_callback_sys_t *, httpd_client_t *, httpd_message_t *answer, const httpd_message_t *query );
 typedef struct httpd_file_t     httpd_file_t;
 typedef struct httpd_file_sys_t httpd_file_sys_t;
 typedef int (*httpd_file_callback_t)( httpd_file_sys_t *, httpd_file_t *, uint8_t *psz_request, uint8_t **pp_data, int *pi_data );
@@ -427,8 +443,6 @@ typedef struct osd_menu_state_t osd_menu_state_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;
@@ -448,6 +462,17 @@ typedef struct update_iterator_t update_iterator_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
  *****************************************************************************/
@@ -460,15 +485,46 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *,      /* variable's object */
 /*****************************************************************************
  * Plug-in stuff
  *****************************************************************************/
-#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_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
 
 /*****************************************************************************
@@ -486,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
  *****************************************************************************/
@@ -496,19 +554,16 @@ 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;                                                    \
     const char *psz_object_type;                                            \
-    char *psz_object_name;                                                  \
+    const char *psz_object_name;                                            \
                                                                             \
     /* Messages header */                                                   \
     char *psz_header;                                                       \
     int  i_flags;                                                           \
                                                                             \
-    /* Thread properties, if any */                                         \
-    vlc_bool_t   b_thread;                                                  \
-    vlc_thread_t thread_id;                                                 \
-                                                                            \
     /* Object access lock */                                                \
     vlc_mutex_t  object_lock;                                               \
     vlc_cond_t   object_wait;                                               \
@@ -517,16 +572,9 @@ 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_global_data_t *p_libvlc_global;         /**< root of all evil */ \
     libvlc_int_t *p_libvlc;                  /**< (root of all evil) - 1 */ \
                                                                             \
     volatile int    i_refcount;                         /**< usage count */ \
@@ -614,6 +662,13 @@ static int64_t GCD( int64_t a, int64_t b )
     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; }
@@ -633,174 +688,50 @@ static int64_t GCD( int64_t a, int64_t b )
 #define FREENULL(a) if( a ) { free( a ); a = NULL; }
 #define FREE(a) if( a ) { free( 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;                   \
-            }                                   \
-        }                                       \
-    }
-
-/* Binary search in an array */
-#define BSEARCH( entries, count, elem, zetype, key, answer ) {  \
-    int low = 0, high = count - 1;   \
-    answer = -1; \
-    while( low <= high ) {\
-        int mid = (low + high ) / 2; /* Just don't care about 2^30 tables */ \
-        zetype mid_val = entries[mid] elem;\
-        if( mid_val < key ) \
-            low = mid + 1; \
-        else if ( mid_val > key ) \
-            high = mid -1;  \
-        else    \
-        {   \
-            answer = mid;  break;   \
-        }\
-    } \
-}
-
-/* Dictionnary handling */
-struct dict_entry_t
-{
-    int       i_int;
-    char     *psz_string;
-    uint64_t  i_hash;
-    void     *p_data;
-};
+#define EMPTY_STR(str) (!str || !*str)
 
-struct dict_t
-{
-    dict_entry_t *p_entries;
-    int i_entries;
-};
+VLC_EXPORT( char const *, vlc_error, ( int ) );
 
-VLC_EXPORT( dict_t *, vlc_DictNew, (void) );
-VLC_EXPORT( void, vlc_DictClear, (dict_t * ) );
-VLC_EXPORT( void, vlc_DictInsert, (dict_t *, int, const char *, void * ) );
-VLC_EXPORT( void*, vlc_DictGet, (dict_t *, int, const char * ) );
-VLC_EXPORT( int, vlc_DictLookup, (dict_t *, int, const char * ) );
+#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)
@@ -812,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;
@@ -827,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;
@@ -848,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 )
@@ -948,6 +879,13 @@ 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 ) );
@@ -982,7 +920,8 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw )
 #   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. */
@@ -1068,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
@@ -1080,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 <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))
@@ -1198,7 +1159,7 @@ VLC_EXPORT( size_t, vlc_iconv, ( vlc_iconv_t, const char **, size_t *, char **,
 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)
 
 /*****************************************************************************
@@ -1215,11 +1176,12 @@ 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
  *****************************************************************************/
-#if defined (WIN32) || !defined (HAVE_SHARED_LIBVLC)
+#ifdef WIN32
 VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) );
 #endif
 
@@ -1235,7 +1197,7 @@ VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) );
 #       include <libintl.h>
 #   endif
 #   undef _
-#   if defined (WIN32) || !defined (HAVE_SHARED_LIBVLC)
+#   ifdef WIN32
 #       define _(String) vlc_dgettext (PACKAGE_NAME, String)
 #   else
 #       define _(String) dgettext(PACKAGE_NAME, String)
@@ -1255,25 +1217,28 @@ 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
  *****************************************************************************/
-#ifndef HAVE_SHARED_LIBVLC
-VLC_EXPORT( const char *, VLC_Changeset, ( void ) );
-#   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