]> git.sesse.net Git - vlc/blobdiff - src/libvlc-common.c
Hide i_children and pp_children away
[vlc] / src / libvlc-common.c
index 0403d34d9f95f796b316106160c65617f5a1f463..26d58a8b9dd39a7d01ea85accd6dae5bcf245fa9 100644 (file)
@@ -179,8 +179,8 @@ libvlc_int_t * libvlc_InternalCreate( void )
         return NULL;
 
     priv = libvlc_priv (p_libvlc);
-    p_libvlc->p_playlist = NULL;
-    p_libvlc->p_interaction = NULL;
+    priv->p_playlist = NULL;
+    priv->p_interaction = NULL;
     priv->p_vlm = NULL;
     p_libvlc->psz_object_name = strdup( "libvlc" );
 
@@ -248,20 +248,15 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     system_Init( p_libvlc, &i_argc, ppsz_argv );
 
     /* Get the executable name (similar to the basename command) */
-    if( i_argc > 0 )
+    if( i_argc > 0 && ppsz_argv[0][0] )
     {
-        const char *exe = strdup( ppsz_argv[0] );
-        const char *tmp = exe;
-        while( *exe )
-        {
-            if( *exe++ == '/' )
-                tmp = exe;
-        }
-        p_libvlc->psz_object_name = strdup( tmp );
-    }
-    else
-    {
-        p_libvlc->psz_object_name = strdup( "vlc" );
+        free( p_libvlc->psz_object_name );
+
+        const char *psz_exe = strrchr( ppsz_argv[0], '/' );
+        if( psz_exe && *(psz_exe + 1) )
+            p_libvlc->psz_object_name = strdup( psz_exe + 1 );
+        else
+            p_libvlc->psz_object_name = strdup( ppsz_argv[0] );
     }
 
     /*
@@ -301,10 +296,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
 
     /* Set the config file stuff */
     p_libvlc->psz_homedir    = config_GetHomeDir();
-    p_libvlc->psz_configdir  = config_GetConfigDir( p_libvlc );
-    p_libvlc->psz_datadir    = config_GetUserDataDir( p_libvlc );
-    p_libvlc->psz_cachedir   = config_GetCacheDir( p_libvlc );
-    p_libvlc->psz_configfile = config_GetCustomConfigFile( p_libvlc );
+    priv->psz_configfile = config_GetCustomConfigFile( p_libvlc );
 
     /* Check for plugins cache options */
     if( config_GetInt( p_libvlc, "reset-plugins-cache" ) > 0 )
@@ -317,7 +309,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
 
     /* Check for daemon mode */
 #ifndef WIN32
-    if( config_GetInt( p_libvlc, "daemon" ) )
+    if( config_GetInt( p_libvlc, "daemon" ) > 0 )
     {
 #ifdef HAVE_DAEMON
         char *psz_pidfile = NULL;
@@ -434,7 +426,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     }
 
     msg_Dbg( p_libvlc, "module bank initialized, found %i modules",
-             p_libvlc_global->p_module_bank->i_children );
+             vlc_internals( p_libvlc_global->p_module_bank )->i_children );
 
     /* Check for help on modules */
     if( (p_tmp = config_GetPsz( p_libvlc, "module" )) )
@@ -722,11 +714,11 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
         return VLC_ENOMEM;
     }
     vlc_mutex_init( &p_libvlc->p_stats->lock );
-    p_libvlc->p_stats_computer = NULL;
+    priv->p_stats_computer = NULL;
 
     /* Init the array that holds every input item */
-    ARRAY_INIT( p_libvlc->input_items );
-    p_libvlc->i_last_input_id = 0;
+    ARRAY_INIT( priv->input_items );
+    priv->i_last_input_id = 0;
 
     /*
      * Initialize hotkey handling
@@ -740,11 +732,11 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
                      p_libvlc->p_hotkeys );
 
     /* Initialize interaction */
-    p_libvlc->p_interaction = interaction_Init( p_libvlc );
+    priv->p_interaction = interaction_Init( p_libvlc );
 
     /* Initialize playlist and get commandline files */
     playlist_ThreadCreate( p_libvlc );
-    if( !p_libvlc->p_playlist )
+    if( !priv->p_playlist )
     {
         msg_Err( p_libvlc, "playlist initialization failed" );
         if( priv->p_memcpy_module != NULL )
@@ -754,7 +746,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
         module_EndBank( p_libvlc );
         return VLC_EGENERIC;
     }
-    p_playlist = p_libvlc->p_playlist;
+    p_playlist = priv->p_playlist;
 
     psz_modules = config_GetPsz( p_playlist, "services-discovery" );
     if( psz_modules && *psz_modules )
@@ -809,7 +801,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
         if( psz_temp )
         {
             sprintf( psz_temp, "%s,none", psz_module );
-            VLC_AddIntf( 0, psz_temp, false, false );
+            libvlc_InternalAddIntf( p_libvlc, psz_temp, false, false, 0, NULL );
             free( psz_temp );
         }
     }
@@ -819,18 +811,18 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     /*
      * Always load the hotkeys interface if it exists
      */
-    VLC_AddIntf( 0, "hotkeys,none", false, false );
+    libvlc_InternalAddIntf( p_libvlc, "hotkeys,none", false, false, 0, NULL );
 
 #ifdef HAVE_DBUS_3
     /* loads dbus control interface if in one-instance mode
      * we do it only when playlist exists, because dbus module needs it */
     if( config_GetInt( p_libvlc, "one-instance" ) > 0 )
-        VLC_AddIntf( 0, "dbus,none", false, false );
+        libvlc_InternalAddIntf( p_libvlc, "dbus,none", false, false, 0, NULL );
 
     /* Prevents the power management daemon from suspending the system
      * when VLC is active */
     if( config_GetInt( p_libvlc, "inhibit" ) > 0 )
-        VLC_AddIntf( 0, "inhibit,none", false, false );
+        libvlc_InternalAddIntf( p_libvlc, "inhibit,none", false, false, 0, NULL );
 #endif
 
     /*
@@ -840,13 +832,13 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
 #ifdef HAVE_X11_XLIB_H
     if( config_GetInt( p_libvlc, "disable-screensaver" ) )
     {
-        VLC_AddIntf( 0, "screensaver,none", false, false );
+        libvlc_InternalAddIntf( p_libvlc, "screensaver,none", false, false, 0, NULL );
     }
 #endif
 
     if( config_GetInt( p_libvlc, "file-logging" ) > 0 )
     {
-        VLC_AddIntf( 0, "logger,none", false, false );
+        libvlc_InternalAddIntf( p_libvlc, "logger,none", false, false, 0, NULL );
     }
 #ifdef HAVE_SYSLOG_H
     if( config_GetInt( p_libvlc, "syslog" ) > 0 )
@@ -859,12 +851,12 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
 
     if( config_GetInt( p_libvlc, "show-intf" ) > 0 )
     {
-        VLC_AddIntf( 0, "showintf,none", false, false );
+        libvlc_InternalAddIntf( p_libvlc, "showintf,none", false, false, 0, NULL );
     }
 
     if( config_GetInt( p_libvlc, "network-synchronisation") > 0 )
     {
-        VLC_AddIntf( 0, "netsync,none", false, false );
+        libvlc_InternalAddIntf( p_libvlc, "netsync,none", false, false, 0, NULL );
     }
 
 #ifdef WIN32
@@ -947,7 +939,7 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
 
     /* Free playlist */
     msg_Dbg( p_libvlc, "removing playlist" );
-    playlist_ThreadDestroy( p_libvlc->p_playlist );
+    vlc_object_release( priv->p_playlist );
 
     /* Free video outputs */
     msg_Dbg( p_libvlc, "removing all video outputs" );
@@ -968,15 +960,22 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
     }
 
 #ifdef ENABLE_SOUT
+    playlist_t         * p_playlist;
     sout_instance_t    * p_sout;
 
-    p_sout = vlc_object_find( p_libvlc, VLC_OBJECT_SOUT, FIND_CHILD );
-    if( p_sout )
+    p_playlist = vlc_object_find( p_libvlc, VLC_OBJECT_PLAYLIST, FIND_CHILD );
+    if( p_playlist )
     {
-        msg_Dbg( p_sout, "removing kept stream output" );
-        vlc_object_detach( (vlc_object_t*)p_sout );
-        vlc_object_release( (vlc_object_t*)p_sout );
-        sout_DeleteInstance( p_sout );
+        p_sout = vlc_object_find( p_playlist, VLC_OBJECT_SOUT, FIND_CHILD );
+        if( p_sout )
+        {
+            msg_Dbg( p_sout, "removing kept stream output" );
+            vlc_object_detach( (vlc_object_t*)p_sout );
+            vlc_object_release( (vlc_object_t*)p_sout );
+            sout_DeleteInstance( p_sout );
+        }
+
+        vlc_object_release( p_playlist );
     }
 
     /* Destroy VLM if created in libvlc_InternalInit */
@@ -988,7 +987,7 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
 
     /* Free interaction */
     msg_Dbg( p_libvlc, "removing interaction" );
-    vlc_object_release( p_libvlc->p_interaction );
+    vlc_object_release( priv->p_interaction );
 
     stats_TimersDumpAll( p_libvlc );
     stats_TimersCleanAll( p_libvlc );
@@ -1008,13 +1007,13 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
 #endif
 
     bool b_clean = true;
-    FOREACH_ARRAY( input_item_t *p_del, p_libvlc->input_items )
+    FOREACH_ARRAY( input_item_t *p_del, priv->input_items )
         msg_Err( p_libvlc, "input item %p has not been deleted properly: refcount %d, name %s",
             p_del, p_del->i_gc_refcount, p_del->psz_name ? p_del->psz_name : "(null)" );
         b_clean = false;
     FOREACH_END();
     assert( b_clean );
-    ARRAY_RESET( p_libvlc->input_items );
+    ARRAY_RESET( priv->input_items );
 
     msg_Dbg( p_libvlc, "removing stats" );
     vlc_mutex_destroy( &p_libvlc->p_stats->lock );
@@ -1041,7 +1040,7 @@ int libvlc_InternalDestroy( libvlc_int_t *p_libvlc, bool b_release )
 #ifndef WIN32
     char* psz_pidfile = NULL;
 
-    if( config_GetInt( p_libvlc, "daemon" ) > 0 )
+    if( b_daemon )
     {
         psz_pidfile = config_GetPsz( p_libvlc, "pidfile" );
         if( psz_pidfile != NULL )
@@ -1067,10 +1066,7 @@ int libvlc_InternalDestroy( libvlc_int_t *p_libvlc, bool b_release )
     module_EndBank( p_libvlc );
 
     FREENULL( p_libvlc->psz_homedir );
-    FREENULL( p_libvlc->psz_configdir );
-    FREENULL( p_libvlc->psz_datadir );
-    FREENULL( p_libvlc->psz_cachedir );
-    FREENULL( p_libvlc->psz_configfile );
+    FREENULL( priv->psz_configfile );
     var_DelCallback( p_libvlc, "key-pressed", vlc_key_to_action,
                      p_libvlc->p_hotkeys );
     FREENULL( p_libvlc->p_hotkeys );
@@ -1149,7 +1145,7 @@ int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc,
 
     /* Interface doesn't handle play on start so do it ourselves */
     if( !p_intf->b_play && b_play )
-        playlist_Play( p_libvlc->p_playlist );
+        playlist_Play( libvlc_priv(p_libvlc)->p_playlist );
 
     /* Try to run the interface */
     p_intf->b_play = b_play;
@@ -2002,6 +1998,7 @@ static void InitDeviceValues( libvlc_int_t *p_vlc )
     p_connection = dbus_bus_get ( DBUS_BUS_SYSTEM, &error );
     if( dbus_error_is_set( &error ) || !p_connection )
     {
+        libhal_ctx_free( ctx );
         dbus_error_free( &error );
         return;
     }