Make it possible to force a distro.mak to use. This is helpfull in cross-compile...
[vlc.git] / src / modules / modules.c
index 4fcf249..274807a 100644 (file)
@@ -157,7 +157,7 @@ static void module_LoadMain( vlc_object_t *p_this );
 
 /* Sub-version number
  * (only used to avoid breakage in dev version when cache structure changes) */
 
 /* Sub-version number
  * (only used to avoid breakage in dev version when cache structure changes) */
-#define CACHE_SUBVERSION_NUM 2
+#define CACHE_SUBVERSION_NUM 3
 
 /*****************************************************************************
  * module_InitBank: create the module bank.
 
 /*****************************************************************************
  * module_InitBank: create the module bank.
@@ -1119,7 +1119,7 @@ static module_t * AllocatePlugin( vlc_object_t * p_this, char * psz_file )
 
     /* Now that we have successfully loaded the module, we can
      * allocate a structure for it */
 
     /* Now that we have successfully loaded the module, we can
      * allocate a structure for it */
-    p_module = vlc_object_create( p_this, VLC_OBJECT_MODULE );
+    p_module = vlc_module_create( p_this );
     if( p_module == NULL )
     {
         msg_Err( p_this, "out of memory" );
     if( p_module == NULL )
     {
         msg_Err( p_this, "out of memory" );
@@ -1130,9 +1130,6 @@ static module_t * AllocatePlugin( vlc_object_t * p_this, char * psz_file )
     /* We need to fill these since they may be needed by CallEntry() */
     p_module->psz_filename = psz_file;
     p_module->handle = handle;
     /* We need to fill these since they may be needed by CallEntry() */
     p_module->psz_filename = psz_file;
     p_module->handle = handle;
-#ifndef HAVE_SHARED_LIBVLC
-    p_module->p_symbols = &p_this->p_libvlc_global->p_module_bank->symbols;
-#endif
     p_module->b_loaded = VLC_TRUE;
 
     /* Initialize the module: fill p_module, default config */
     p_module->b_loaded = VLC_TRUE;
 
     /* Initialize the module: fill p_module, default config */
@@ -1234,7 +1231,7 @@ static int AllocateBuiltinModule( vlc_object_t * p_this,
 
     /* Now that we have successfully loaded the module, we can
      * allocate a structure for it */
 
     /* Now that we have successfully loaded the module, we can
      * allocate a structure for it */
-    p_module = vlc_object_create( p_this, VLC_OBJECT_MODULE );
+    p_module = vlc_module_create( p_this );
     if( p_module == NULL )
     {
         msg_Err( p_this, "out of memory" );
     if( p_module == NULL )
     {
         msg_Err( p_this, "out of memory" );
@@ -1310,7 +1307,7 @@ static int DeleteModule( module_t * p_module, vlc_bool_t b_detach )
  *****************************************************************************/
 static int CallEntry( module_t * p_module )
 {
  *****************************************************************************/
 static int CallEntry( module_t * p_module )
 {
-    static const char * const psz_name = "vlc_entry" MODULE_SUFFIX;
+    static const char psz_name[] = "vlc_entry" MODULE_SUFFIX;
     int (* pf_symbol) ( module_t * p_module );
 
     /* Try to resolve the symbol */
     int (* pf_symbol) ( module_t * p_module );
 
     /* Try to resolve the symbol */
@@ -1523,12 +1520,11 @@ static void * GetSymbol( module_handle_t handle, const char * psz_function )
      * can we do ? */
     if( p_symbol == NULL )
     {
      * can we do ? */
     if( p_symbol == NULL )
     {
-        char *psz_call = malloc( strlen( psz_function ) + 2 );
+        char psz_call[strlen( psz_function ) + 2];
 
 
-        strcpy( psz_call + 1, psz_function );
         psz_call[ 0 ] = '_';
         psz_call[ 0 ] = '_';
+        memcpy( psz_call + 1, psz_function, sizeof (psz_call) - 1 );
         p_symbol = _module_getsymbol( handle, psz_call );
         p_symbol = _module_getsymbol( handle, psz_call );
-        free( psz_call );
     }
 
     return p_symbol;
     }
 
     return p_symbol;
@@ -1675,7 +1671,7 @@ static void CacheLoad( vlc_object_t *p_this )
     free( psz_filename );
 
     /* Check the file size */
     free( psz_filename );
 
     /* Check the file size */
-    i_read = fread( &i_file_size, sizeof(char), sizeof(i_file_size), file );
+    i_read = fread( &i_file_size, 1, sizeof(i_file_size), file );
     if( i_read != sizeof(i_file_size) )
     {
         msg_Warn( p_this, "This doesn't look like a valid plugins cache "
     if( i_read != sizeof(i_file_size) )
     {
         msg_Warn( p_this, "This doesn't look like a valid plugins cache "
@@ -1696,7 +1692,7 @@ static void CacheLoad( vlc_object_t *p_this )
 
     /* Check the file is a plugins cache */
     i_size = sizeof(PLUGINSCACHE_DIR COPYRIGHT_MESSAGE) - 1;
 
     /* Check the file is a plugins cache */
     i_size = sizeof(PLUGINSCACHE_DIR COPYRIGHT_MESSAGE) - 1;
-    i_read = fread( p_cachestring, sizeof(char), i_size, file );
+    i_read = fread( p_cachestring, 1, i_size, file );
     if( i_read != i_size ||
         memcmp( p_cachestring, PLUGINSCACHE_DIR COPYRIGHT_MESSAGE, i_size ) )
     {
     if( i_read != i_size ||
         memcmp( p_cachestring, PLUGINSCACHE_DIR COPYRIGHT_MESSAGE, i_size ) )
     {
@@ -1706,7 +1702,7 @@ static void CacheLoad( vlc_object_t *p_this )
     }
 
     /* Check Sub-version number */
     }
 
     /* Check Sub-version number */
-    i_read = fread( &i_marker, sizeof(char), sizeof(i_marker), file );
+    i_read = fread( &i_marker, 1, sizeof(i_marker), file );
     if( i_read != sizeof(i_marker) || i_marker != CACHE_SUBVERSION_NUM )
     {
         msg_Warn( p_this, "This doesn't look like a valid plugins cache "
     if( i_read != sizeof(i_marker) || i_marker != CACHE_SUBVERSION_NUM )
     {
         msg_Warn( p_this, "This doesn't look like a valid plugins cache "
@@ -1717,7 +1713,7 @@ static void CacheLoad( vlc_object_t *p_this )
 
     /* Check the language hasn't changed */
     sprintf( p_lang, "%5.5s", _("C") ); i_size = 5;
 
     /* Check the language hasn't changed */
     sprintf( p_lang, "%5.5s", _("C") ); i_size = 5;
-    i_read = fread( p_cachelang, sizeof(char), i_size, file );
+    i_read = fread( p_cachelang, 1, i_size, file );
     if( i_read != i_size || memcmp( p_cachelang, p_lang, i_size ) )
     {
         msg_Warn( p_this, "This doesn't look like a valid plugins cache "
     if( i_read != i_size || memcmp( p_cachelang, p_lang, i_size ) )
     {
         msg_Warn( p_this, "This doesn't look like a valid plugins cache "
@@ -1727,7 +1723,7 @@ static void CacheLoad( vlc_object_t *p_this )
     }
 
     /* Check header marker */
     }
 
     /* Check header marker */
-    i_read = fread( &i_marker, sizeof(char), sizeof(i_marker), file );
+    i_read = fread( &i_marker, 1, sizeof(i_marker), file );
     if( i_read != sizeof(i_marker) ||
         i_marker != ftell( file ) - (int)sizeof(i_marker) )
     {
     if( i_read != sizeof(i_marker) ||
         i_marker != ftell( file ) - (int)sizeof(i_marker) )
     {
@@ -1738,7 +1734,14 @@ static void CacheLoad( vlc_object_t *p_this )
     }
 
     p_this->p_libvlc_global->p_module_bank->i_loaded_cache = 0;
     }
 
     p_this->p_libvlc_global->p_module_bank->i_loaded_cache = 0;
-    fread( &i_cache, sizeof(char), sizeof(i_cache), file );
+    if (fread( &i_cache, 1, sizeof(i_cache), file ) != sizeof(i_cache) )
+    {
+        msg_Warn( p_this, "This doesn't look like a valid plugins cache "
+                  "(file too short)" );
+        fclose( file );
+        return;
+    }
+
     if( i_cache )
         pp_cache = p_this->p_libvlc_global->p_module_bank->pp_loaded_cache =
                    malloc( i_cache * sizeof(void *) );
     if( i_cache )
         pp_cache = p_this->p_libvlc_global->p_module_bank->pp_loaded_cache =
                    malloc( i_cache * sizeof(void *) );
@@ -1782,7 +1785,7 @@ static void CacheLoad( vlc_object_t *p_this )
 
         if( pp_cache[i]->b_junk ) continue;
 
 
         if( pp_cache[i]->b_junk ) continue;
 
-        pp_cache[i]->p_module = vlc_object_create( p_this, VLC_OBJECT_MODULE );
+        pp_cache[i]->p_module = vlc_module_create( p_this );
 
         /* Load additional infos */
         LOAD_STRING( pp_cache[i]->p_module->psz_object_name );
 
         /* Load additional infos */
         LOAD_STRING( pp_cache[i]->p_module->psz_object_name );
@@ -1811,10 +1814,7 @@ static void CacheLoad( vlc_object_t *p_this )
 
         while( i_submodules-- )
         {
 
         while( i_submodules-- )
         {
-            module_t *p_module = vlc_object_create( p_this, VLC_OBJECT_MODULE);
-            vlc_object_attach( p_module, pp_cache[i]->p_module );
-            p_module->b_submodule = VLC_TRUE;
-
+            module_t *p_module = vlc_submodule_create( pp_cache[i]->p_module );
             LOAD_STRING( p_module->psz_object_name );
             LOAD_STRING( p_module->psz_shortname );
             LOAD_STRING( p_module->psz_longname );
             LOAD_STRING( p_module->psz_object_name );
             LOAD_STRING( p_module->psz_shortname );
             LOAD_STRING( p_module->psz_longname );