]> git.sesse.net Git - vlc/blobdiff - include/vlc_common.h
Fix abortion if killing signals are re-used.
[vlc] / include / vlc_common.h
index e42488805705e35813dc53a9c0135805c75e91f0..797b43cf9167a0a542c3721e69af134661d6293a 100644 (file)
@@ -472,17 +472,39 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *,      /* variable's object */
 
 #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
@@ -627,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; }
@@ -701,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;
@@ -716,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;
@@ -737,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 );
@@ -980,7 +1009,7 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw )
 #   include <dirent.h>
 VLC_INTERNAL( void *, vlc_wopendir, ( const wchar_t * ) );
 VLC_INTERNAL( struct _wdirent *, vlc_wreaddir, ( void * ) );
-VLC_INTERNAL( int, vlc_wclosedir, ( 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 * ) );
@@ -989,9 +1018,12 @@ VLC_INTERNAL( long, vlc_telldir, ( void * ) );
 #   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 */