]> git.sesse.net Git - vlc/blobdiff - include/vlc_common.h
Fix abortion if killing signals are re-used.
[vlc] / include / vlc_common.h
index a8dcde954ffc78015df15f7839576263ff30a35f..797b43cf9167a0a542c3721e69af134661d6293a 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
@@ -471,19 +470,41 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *,      /* variable's object */
  * Plug-in stuff
  *****************************************************************************/
 
-#include "modules_inner.h"
+#include "vlc_modules_macros.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
+#if defined (WIN32) && defined (DLL_EXPORT)
+#  ifdef __cplusplus
+#    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_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_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_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_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_EXPORT( type, name, args ) type name args
+#         define VLC_INTERNAL( type, name, args ) type name args
+#      endif
+#    endif
+#  else
+#    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
-#define VLC_INTERNAL( type, name, args ) VLC_EXPORT (type, name, args)
 
 /*****************************************************************************
  * OS-specific headers and thread types
@@ -628,6 +649,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; }
@@ -649,6 +677,8 @@ static int64_t GCD( int64_t a, int64_t b )
 
 #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
@@ -700,14 +730,14 @@ static inline uint64_t GetQWLE( const void * _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;
@@ -715,20 +745,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;
@@ -736,7 +766,7 @@ 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 );
@@ -957,9 +987,15 @@ 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__)
@@ -974,13 +1010,19 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw )
 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
-#else
+#   define rewinddir vlc_rewinddir
+#   define seekdir vlc_seekdir
+#   define telldir vlc_telldir
+#elif !defined(__PLUGIN__)
 #   define vlc_wclosedir NULL
 #endif
 
@@ -1168,15 +1210,23 @@ VLC_EXPORT( const char *, VLC_Changeset, ( void ) );
 #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