]> git.sesse.net Git - vlc/commitdiff
psz_object_name should not be const! (else module name aliasing cannot work)
authorAntoine Cellerier <dionoea@videolan.org>
Tue, 22 Apr 2008 21:00:55 +0000 (23:00 +0200)
committerAntoine Cellerier <dionoea@videolan.org>
Tue, 22 Apr 2008 22:42:46 +0000 (00:42 +0200)
include/vlc_common.h
modules/misc/freetype.c
src/libvlc-common.c
src/misc/objects.c
src/modules/entry.c
src/modules/modules.c
src/playlist/thread.c
src/stream_output/sap.c

index a83414490e1a11c61c7e06956c6a3de9e50a1b95..ad0c97f2f49662d5427c50ca9cd7903bf246b574 100644 (file)
@@ -523,7 +523,7 @@ typedef struct vlc_object_internals_t vlc_object_internals_t;
     int   i_object_id;                                                      \
     int   i_object_type;                                                    \
     const char *psz_object_type;                                            \
-    const char *psz_object_name;                                            \
+    char *psz_object_name;                                                  \
                                                                             \
     /* Messages header */                                                   \
     char *psz_header;                                                       \
index 51b3bdd7dd912dfd34fa308e2770d9bfe88fc9e8..94523571c4853b1d1fc9ac40b3de1f02969066ec 100644 (file)
@@ -386,7 +386,7 @@ static int Create( vlc_object_t *p_this )
                                            VLC_OBJECT_GENERIC );
         if( p_fontbuilder )
         {
-            p_fontbuilder->psz_object_name = "fontlist builder";
+            p_fontbuilder->psz_object_name = strdup( "fontlist builder" );
             vlc_object_attach( p_fontbuilder, p_filter->p_libvlc );
 
             var_Create( p_fontbuilder, "build-done", VLC_VAR_BOOL );
index bd432a96c927552ca1fe3c0352cea31f7766f784..ee4dfe7fce222f062cc36e5daf6734a696041e4a 100644 (file)
@@ -187,7 +187,7 @@ libvlc_int_t * libvlc_InternalCreate( void )
     p_libvlc->p_playlist = NULL;
     p_libvlc->p_interaction = NULL;
     p_libvlc->p_vlm = NULL;
-    p_libvlc->psz_object_name = "libvlc";
+    p_libvlc->psz_object_name = strdup( "libvlc" );
 
     /* Initialize message queue */
     msg_Create( p_libvlc );
@@ -254,16 +254,18 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     /* Get the executable name (similar to the basename command) */
     if( i_argc > 0 )
     {
-        const char *exe = p_libvlc->psz_object_name = ppsz_argv[0];
+        const char *exe = strdup( ppsz_argv[0] );
+        const char *tmp = exe;
         while( *exe )
         {
             if( *exe++ == '/' )
-                p_libvlc->psz_object_name = exe;
+                tmp = exe;
         }
+        p_libvlc->psz_object_name = strdup( tmp );
     }
     else
     {
-        p_libvlc->psz_object_name = "vlc";
+        p_libvlc->psz_object_name = strdup( "vlc" );
     }
 
     /*
index ce6314fcb57ec9b04574b9b309463f5c8073ebf0..dcad8c0b9d2b174d3caf82b924af63eeca84e51b 100644 (file)
@@ -427,6 +427,8 @@ static void vlc_object_destroy( vlc_object_t *p_this )
         vlc_mutex_destroy( &structure_lock );
     }
 
+    FREENULL( p_this->psz_object_name );
+
 #if defined(WIN32) || defined(UNDER_CE)
     /* if object has an associated thread, close it now */
     if( p_priv->thread_id.hThread )
index c94b45056e410fb0ec505e4499ac7569c9bdf4ba..63e668fd9b7533a2fa586e61deee7dc7c7ddab1a 100644 (file)
@@ -41,7 +41,8 @@ module_t *vlc_module_create (vlc_object_t *obj)
         return NULL;
 
     module->b_reentrant = module->b_unloadable = true;
-    module->psz_object_name = module->psz_longname = default_name;
+    module->psz_object_name = strdup( default_name );
+    module->psz_longname = default_name;
     module->psz_capability = (char*)"";
     module->i_score = 1;
     module->i_config_items = module->i_bool_items = 0;
@@ -68,7 +69,7 @@ module_t *vlc_submodule_create (module_t *module)
     memcpy (submodule->pp_shortcuts, module->pp_shortcuts,
             sizeof (submodule->pp_shortcuts));
 
-    submodule->psz_object_name = module->psz_object_name;
+    submodule->psz_object_name = strdup( module->psz_object_name );
     submodule->psz_shortname = module->psz_shortname;
     submodule->psz_longname = module->psz_longname;
     submodule->psz_capability = module->psz_capability;
@@ -131,7 +132,9 @@ int vlc_module_set (module_t *module, int propid, void *value)
             break;
 
         case VLC_MODULE_NAME:
-            module->pp_shortcuts[0] = module->psz_object_name = (char *)value;
+            free( module->psz_object_name );
+            module->psz_object_name = strdup( (char *)value );
+            module->pp_shortcuts[0] = (char *)value;
             if (module->psz_longname == default_name)
                 module->psz_longname = (char *)value;
             break;
index 92ba948e0fbf7b8f81498b27089437e9fdbb18cf..9f0674dbcaf4a5c5ffc90914b263fdbcb4bd2537 100644 (file)
@@ -123,7 +123,7 @@ void __module_InitBank( vlc_object_t *p_this )
     if( p_libvlc_global->p_module_bank == NULL )
     {
         p_bank = vlc_object_create( p_this, sizeof(module_bank_t) );
-        p_bank->psz_object_name = "module bank";
+        p_bank->psz_object_name = strdup( "module bank" );
         p_bank->i_usage = 1;
         p_bank->i_cache = p_bank->i_loaded_cache = 0;
         p_bank->pp_cache = p_bank->pp_loaded_cache = NULL;
@@ -1314,7 +1314,6 @@ static void DupModule( module_t *p_module )
 
     /* We strdup() these entries so that they are still valid when the
      * module is unloaded. */
-    /* This one is a (const char *) that will never get freed. */
     p_module->psz_object_name = strdup( p_module->psz_object_name );
     p_module->psz_capability = strdup( p_module->psz_capability );
     p_module->psz_shortname = p_module->psz_shortname ?
@@ -1349,7 +1348,7 @@ static void UndupModule( module_t *p_module )
         free( *pp_shortcut );
     }
 
-    free( p_module->psz_object_name );
+    FREENULL( p_module->psz_object_name );
     free( p_module->psz_capability );
     free( p_module->psz_shortname );
     free( p_module->psz_longname );
index 5a73273c3bab33f65f193b1bbbcff83437c504ef..3e2a3d85f59da04449b3de51fff65acebbd64597 100644 (file)
@@ -61,7 +61,7 @@ void __playlist_ThreadCreate( vlc_object_t *p_parent )
     // Preparse
     p_playlist->p_preparse = vlc_object_create( p_playlist,
                                   sizeof( playlist_preparse_t ) );
-    p_playlist->p_preparse->psz_object_name = "preparser";
+    p_playlist->p_preparse->psz_object_name = strdup( "preparser" );
     if( !p_playlist->p_preparse )
     {
         msg_Err( p_playlist, "unable to create preparser" );
@@ -85,7 +85,7 @@ void __playlist_ThreadCreate( vlc_object_t *p_parent )
     // Secondary Preparse
     p_playlist->p_fetcher = vlc_object_create( p_playlist,
                               sizeof( playlist_fetcher_t ) );
-    p_playlist->p_fetcher->psz_object_name = "fetcher";
+    p_playlist->p_fetcher->psz_object_name = strdup( "fetcher" );
     if( !p_playlist->p_fetcher )
     {
         msg_Err( p_playlist, "unable to create secondary preparser" );
index bb1ab7c89b84a0517571458f5f025caa3380f2fc..7dc5254e43fed3c688593c58ce3d0a93d1315a5c 100644 (file)
@@ -128,7 +128,7 @@ sap_handler_t *announce_SAPHandlerCreate( announce_handler_t *p_announce )
         return NULL;
     }
 
-    p_sap->psz_object_name = "sap announcer";
+    p_sap->psz_object_name = strdup( "sap announcer" );
 
     vlc_mutex_init( p_sap, &p_sap->object_lock );