]> git.sesse.net Git - vlc/blobdiff - src/modules/configuration.c
move config_*Intf() out from the header
[vlc] / src / modules / configuration.c
index a5b82fcfea7281b1e89261f66f28951d61634f95..1f957ddec4d1842aab6e9cc4e0de05488c54273b 100644 (file)
@@ -2070,3 +2070,144 @@ static char *ConfigKeyToString( int i_key )
     }
     return psz_key;
 }
+
+/* Adds an extra interface to the configuration */
+void __config_AddIntf( vlc_object_t *p_this, const char *psz_intf )
+{
+    assert( psz_intf );
+
+    char *psz_config, *psz_parser;
+    size_t i_len = strlen( psz_intf );
+
+    psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "control" );
+    while( psz_parser )
+    {
+        if( !strncmp( psz_intf, psz_parser, i_len ) )
+        {
+            free( psz_config );
+            return;
+        }
+        psz_parser = strchr( psz_parser, ':' );
+        if( psz_parser ) psz_parser++; /* skip the ':' */
+    }
+    free( psz_config );
+
+    psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "extraintf" );
+    while( psz_parser )
+    {
+        if( !strncmp( psz_intf, psz_parser, i_len ) )
+        {
+            free( psz_config );
+            return;
+        }
+        psz_parser = strchr( psz_parser, ':' );
+        if( psz_parser ) psz_parser++; /* skip the ':' */
+    }
+
+    /* interface not found in the config, let's add it */
+    if( psz_config && strlen( psz_config ) > 0 )
+    {
+        char *psz_newconfig;
+        if( asprintf( &psz_newconfig, "%s:%s", psz_config, psz_intf ) != -1 )
+        {
+            config_PutPsz( p_this->p_libvlc, "extraintf", psz_newconfig );
+            free( psz_newconfig );
+        }
+    }
+    else
+        config_PutPsz( p_this->p_libvlc, "extraintf", psz_intf );
+
+    free( psz_config );
+}
+
+/* Removes an extra interface from the configuration */
+void __config_RemoveIntf( vlc_object_t *p_this, const char *psz_intf )
+{
+    assert( psz_intf );
+
+    char *psz_config, *psz_parser;
+    size_t i_len = strlen( psz_intf );
+
+    psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "extraintf" );
+    while( psz_parser )
+    {
+        if( !strncmp( psz_intf, psz_parser, i_len ) )
+        {
+            char *psz_newconfig;
+            char *psz_end = psz_parser + i_len;
+            if( *psz_end == ':' ) psz_end++;
+            *psz_parser = '\0';
+            if( asprintf( &psz_newconfig, "%s%s", psz_config, psz_end ) != -1 )
+            {
+                config_PutPsz( p_this->p_libvlc, "extraintf", psz_newconfig );
+                free( psz_newconfig );
+            }
+            break;
+        }
+        psz_parser = strchr( psz_parser, ':' );
+        if( psz_parser ) psz_parser++; /* skip the ':' */
+    }
+    free( psz_config );
+
+    psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "control" );
+    while( psz_parser )
+    {
+        if( !strncmp( psz_intf, psz_parser, i_len ) )
+        {
+            char *psz_newconfig;
+            char *psz_end = psz_parser + i_len;
+            if( *psz_end == ':' ) psz_end++;
+            *psz_parser = '\0';
+            if( asprintf( &psz_newconfig, "%s%s", psz_config, psz_end ) != -1 )
+            {
+                config_PutPsz( p_this->p_libvlc, "control", psz_newconfig );
+                free( psz_newconfig );
+            }
+            break;
+        }
+        psz_parser = strchr( psz_parser, ':' );
+        if( psz_parser ) psz_parser++; /* skip the ':' */
+    }
+    free( psz_config );
+}
+
+/*
+ * Returns VLC_TRUE if the specified extra interface is present in the
+ * configuration, VLC_FALSE if not
+ */
+vlc_bool_t __config_ExistIntf( vlc_object_t *p_this, const char *psz_intf )
+{
+    assert( psz_intf );
+
+    char *psz_config, *psz_parser;
+    size_t i_len = strlen( psz_intf );
+
+    psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "extraintf" );
+    while( psz_parser )
+    {
+        if( !strncmp( psz_parser, psz_intf, i_len ) )
+        {
+            free( psz_config );
+            return VLC_TRUE;
+        }
+        psz_parser = strchr( psz_parser, ':' );
+        if( psz_parser ) psz_parser++; /* skip the ':' */
+    }
+    free( psz_config );
+
+    psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "control" );
+    while( psz_parser )
+    {
+        if( !strncmp( psz_parser, psz_intf, i_len ) )
+        {
+            free( psz_config );
+            return VLC_TRUE;
+        }
+        psz_parser = strchr( psz_parser, ':' );
+        if( psz_parser ) psz_parser++; /* skip the ':' */
+    }
+    free( psz_config );
+
+    return VLC_FALSE;
+}
+