]> git.sesse.net Git - vlc/blobdiff - src/modules/modules.c
vlc_sd_GetNames: use probe
[vlc] / src / modules / modules.c
index f0a015ef04bdc40de10868b114dd99b24ab5abbf..5705de6b5befd735d409fa770ae6ec8352c47662 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <vlc_common.h>
 #include <vlc_plugin.h>
+#include <vlc_memory.h>
 #include "libvlc.h"
 
 #include <stdlib.h>                                      /* free(), strtol() */
@@ -80,6 +81,7 @@
 
 #include "vlc_charset.h"
 #include "vlc_arrays.h"
+#include <vlc_cpu.h>
 
 #include "modules/modules.h"
 
@@ -195,25 +197,15 @@ void module_EndBank( vlc_object_t *p_this, bool b_plugins )
                     p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->p_module );
             free( p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->psz_file );
             free( p_bank->pp_loaded_cache[p_bank->i_loaded_cache] );
-            p_bank->pp_loaded_cache[p_bank->i_loaded_cache] = NULL;
         }
     }
-    if( p_bank->pp_loaded_cache )
-    {
-        free( p_bank->pp_loaded_cache );
-        p_bank->pp_loaded_cache = NULL;
-    }
+    free( p_bank->pp_loaded_cache );
     while( p_bank->i_cache-- )
     {
         free( p_bank->pp_cache[p_bank->i_cache]->psz_file );
         free( p_bank->pp_cache[p_bank->i_cache] );
-        p_bank->pp_cache[p_bank->i_cache] = NULL;
-    }
-    if( p_bank->pp_cache )
-    {
-        free( p_bank->pp_cache );
-        p_bank->pp_cache = NULL;
     }
+    free( p_bank->pp_cache );
 #endif
 
     while( p_bank->head != NULL )
@@ -405,15 +397,11 @@ static int modulecmp (const void *a, const void *b)
  *
  * Return the best module function, given a capability list.
  *
- * If the p_this object doesn't have it's psz_object_name set, then
- * psz_object_name will be set to the module's name, unless the user
- * provided an alias using the "module name@alias" syntax in which case
- * psz_object_name will be set to the alias.
- *
  * \param p_this the vlc object
  * \param psz_capability list of capabilities needed
  * \param psz_name name of the module asked
- * \param b_strict TRUE yto use the strict mode
+ * \param b_strict if true, do not fallback to plugin with a different name
+ *                 but the same capability
  * \return the module or NULL in case of a failure
  */
 module_t * __module_need( vlc_object_t *p_this, const char *psz_capability,
@@ -565,11 +553,14 @@ found_shortcut:
         {
             module_t *p_new_module =
                 AllocatePlugin( p_this, p_real->psz_filename );
-            if( p_new_module )
-            {
-                CacheMerge( p_this, p_real, p_new_module );
-                DeleteModule( p_module_bank, p_new_module );
+            if( p_new_module == NULL )
+            {   /* Corrupted module */
+                msg_Err( p_this, "possibly corrupt module cache" );
+                module_release( p_cand );
+                continue;
             }
+            CacheMerge( p_this, p_real, p_new_module );
+            DeleteModule( p_module_bank, p_new_module );
         }
 #endif
 
@@ -607,16 +598,8 @@ found_shortcut:
     {
         msg_Dbg( p_this, "using %s module \"%s\"",
                  psz_capability, p_module->psz_object_name );
-        if( !p_this->psz_object_name )
-        {
-            /* This assumes that p_this is the object which will be using the
-             * module. That's not always the case ... but it is in most cases.
-             */
-            if( psz_alias )
-                p_this->psz_object_name = strdup( psz_alias );
-            else
-                p_this->psz_object_name = strdup( p_module->psz_object_name );
-        }
+        vlc_object_set_name( p_this, psz_alias ? psz_alias
+                                               : p_module->psz_object_name );
     }
     else if( count == 0 )
     {
@@ -1096,7 +1079,7 @@ static int AllocatePluginFile( vlc_object_t * p_this, module_bank_t *p_bank,
     /* Add entry to cache */
     module_cache_t **pp_cache = p_bank->pp_cache;
 
-    pp_cache = realloc( pp_cache, (p_bank->i_cache + 1) * sizeof(void *) );
+    pp_cache = realloc_or_free( pp_cache, (p_bank->i_cache + 1) * sizeof(void *) );
     if( pp_cache == NULL )
         return -1;
     pp_cache[p_bank->i_cache] = malloc( sizeof(module_cache_t) );