]> git.sesse.net Git - vlc/blobdiff - include/vlc_common.h
Revert the so-called whitelisting commits that are actually blacklisting
[vlc] / include / vlc_common.h
index b00424a3d4ed38bffc3184cf71b603f37f89cf21..a467273876def2093cc448c4daa46fe6a461d6aa 100644 (file)
@@ -63,6 +63,7 @@
  *****************************************************************************/
 #include <stdlib.h>
 #include <stdarg.h>
+#include <assert.h>
 
 #include <string.h>
 #include <stdio.h>
@@ -383,6 +384,7 @@ typedef struct virtual_socket_t v_socket_t;
 typedef struct sockaddr sockaddr;
 typedef struct addrinfo addrinfo;
 typedef struct vlc_acl_t vlc_acl_t;
+typedef struct vlc_url_t vlc_url_t;
 
 /* Misc */
 typedef struct iso639_lang_t iso639_lang_t;
@@ -609,25 +611,38 @@ struct gc_object_t
 
 static inline void __vlc_gc_incref( gc_object_t * p_gc )
 {
+    assert( p_gc->i_gc_refcount > 0 );
+
     p_gc->i_gc_refcount ++;
 };
 
 static inline void __vlc_gc_decref( gc_object_t *p_gc )
 {
+    if( !p_gc ) return;
+
+    assert( p_gc->i_gc_refcount > 0 );
+
     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 ! */
-     }
+    }
+}
+
+static inline void
+__vlc_gc_init( gc_object_t * p_gc, void (*pf_destructor)( gc_object_t * ),
+               void * arg)
+{
+    p_gc->i_gc_refcount = 1;
+    p_gc->pf_destructor = pf_destructor;
+    p_gc->p_destructor_arg = arg;
 }
 
 #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; }
+#define vlc_gc_init( a,b,c ) __vlc_gc_init( (gc_object_t *)a,b,c )
 
 
 /*****************************************************************************
@@ -655,10 +670,15 @@ static inline void __vlc_gc_decref( gc_object_t *p_gc )
 #   define __MIN(a, b)   ( ((a) < (b)) ? (a) : (b) )
 #endif
 
-static int64_t GCD( int64_t a, int64_t b )
+static inline int64_t GCD( int64_t a, int64_t b )
 {
-    if( b ) return GCD( b, a % b );
-    else return a;
+    while( b )
+    {
+        int64_t c = a % b;
+        a = b;
+        b = c;
+    }
+    return a;
 }
 
 /* function imported from libavutil/common.h */
@@ -1027,12 +1047,12 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw )
 
 #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 * ) );
+ 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
@@ -1183,7 +1203,7 @@ VLC_EXPORT( unsigned, vlc_CPU, ( void ) );
  * I18n stuff
  *****************************************************************************/
 #ifdef WIN32
-VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) );
+    VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) );
 #endif
 
 #if defined( ENABLE_NLS ) && \