]> git.sesse.net Git - vlc/blobdiff - include/vlc_configuration.h
configuration: add config_AddIntf() config_RemoveIntf() and config_ExistIntf() to...
[vlc] / include / vlc_configuration.h
index dc52c3793951beab39a604da39664dd4fdaa398e..01181615cea528a6cd5767718fcea8e2dc8f0319 100644 (file)
@@ -445,6 +445,140 @@ static inline config_chain_t *config_chain_find( config_chain_t *p_cfg, const ch
     return p_cfg;
 }
 
+static 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 );
+}
+
+static 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 );
+}
+
+static 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;
+}
+
 static inline char *config_chain_find_value( config_chain_t *p_cfg, const char *psz_name )
 {
     while( p_cfg && strcmp( p_cfg->psz_name, psz_name ) )