intf.c
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:5k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * intf.c: interface configuration handling
  3.  *****************************************************************************
  4.  * Copyright (C) 2001-2007 the VideoLAN team
  5.  * $Id: a97ef24e3ae98ef1260e23fc4c77fdfeb1a09ac1 $
  6.  *
  7.  * Authors: Gildas Bazin <gbazin@videolan.org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #ifdef HAVE_CONFIG_H
  24. # include "config.h"
  25. #endif
  26. #include <vlc_common.h>
  27. #include <assert.h>
  28. /* Adds an extra interface to the configuration */
  29. void __config_AddIntf( vlc_object_t *p_this, const char *psz_intf )
  30. {
  31.     assert( psz_intf );
  32.     char *psz_config, *psz_parser;
  33.     size_t i_len = strlen( psz_intf );
  34.     psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "control" );
  35.     while( psz_parser )
  36.     {
  37.         if( !strncmp( psz_intf, psz_parser, i_len ) )
  38.         {
  39.             free( psz_config );
  40.             return;
  41.         }
  42.         psz_parser = strchr( psz_parser, ':' );
  43.         if( psz_parser ) psz_parser++; /* skip the ':' */
  44.     }
  45.     free( psz_config );
  46.     psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "extraintf" );
  47.     while( psz_parser )
  48.     {
  49.         if( !strncmp( psz_intf, psz_parser, i_len ) )
  50.         {
  51.             free( psz_config );
  52.             return;
  53.         }
  54.         psz_parser = strchr( psz_parser, ':' );
  55.         if( psz_parser ) psz_parser++; /* skip the ':' */
  56.     }
  57.     /* interface not found in the config, let's add it */
  58.     if( psz_config && strlen( psz_config ) > 0 )
  59.     {
  60.         char *psz_newconfig;
  61.         if( asprintf( &psz_newconfig, "%s:%s", psz_config, psz_intf ) != -1 )
  62.         {
  63.             config_PutPsz( p_this->p_libvlc, "extraintf", psz_newconfig );
  64.             free( psz_newconfig );
  65.         }
  66.     }
  67.     else
  68.         config_PutPsz( p_this->p_libvlc, "extraintf", psz_intf );
  69.     free( psz_config );
  70. }
  71. /* Removes an extra interface from the configuration */
  72. void __config_RemoveIntf( vlc_object_t *p_this, const char *psz_intf )
  73. {
  74.     assert( psz_intf );
  75.     char *psz_config, *psz_parser;
  76.     size_t i_len = strlen( psz_intf );
  77.     psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "extraintf" );
  78.     while( psz_parser )
  79.     {
  80.         if( !strncmp( psz_intf, psz_parser, i_len ) )
  81.         {
  82.             char *psz_newconfig;
  83.             char *psz_end = psz_parser + i_len;
  84.             if( *psz_end == ':' ) psz_end++;
  85.             *psz_parser = '';
  86.             if( asprintf( &psz_newconfig, "%s%s", psz_config, psz_end ) != -1 )
  87.             {
  88.                 config_PutPsz( p_this->p_libvlc, "extraintf", psz_newconfig );
  89.                 free( psz_newconfig );
  90.             }
  91.             break;
  92.         }
  93.         psz_parser = strchr( psz_parser, ':' );
  94.         if( psz_parser ) psz_parser++; /* skip the ':' */
  95.     }
  96.     free( psz_config );
  97.     psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "control" );
  98.     while( psz_parser )
  99.     {
  100.         if( !strncmp( psz_intf, psz_parser, i_len ) )
  101.         {
  102.             char *psz_newconfig;
  103.             char *psz_end = psz_parser + i_len;
  104.             if( *psz_end == ':' ) psz_end++;
  105.             *psz_parser = '';
  106.             if( asprintf( &psz_newconfig, "%s%s", psz_config, psz_end ) != -1 )
  107.             {
  108.                 config_PutPsz( p_this->p_libvlc, "control", psz_newconfig );
  109.                 free( psz_newconfig );
  110.             }
  111.             break;
  112.         }
  113.         psz_parser = strchr( psz_parser, ':' );
  114.         if( psz_parser ) psz_parser++; /* skip the ':' */
  115.     }
  116.     free( psz_config );
  117. }
  118. /*
  119.  * Returns true if the specified extra interface is present in the
  120.  * configuration, false if not
  121.  */
  122. bool __config_ExistIntf( vlc_object_t *p_this, const char *psz_intf )
  123. {
  124.     assert( psz_intf );
  125.     char *psz_config, *psz_parser;
  126.     size_t i_len = strlen( psz_intf );
  127.     psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "extraintf" );
  128.     while( psz_parser )
  129.     {
  130.         if( !strncmp( psz_parser, psz_intf, i_len ) )
  131.         {
  132.             free( psz_config );
  133.             return true;
  134.         }
  135.         psz_parser = strchr( psz_parser, ':' );
  136.         if( psz_parser ) psz_parser++; /* skip the ':' */
  137.     }
  138.     free( psz_config );
  139.     psz_config = psz_parser = config_GetPsz( p_this->p_libvlc, "control" );
  140.     while( psz_parser )
  141.     {
  142.         if( !strncmp( psz_parser, psz_intf, i_len ) )
  143.         {
  144.             free( psz_config );
  145.             return true;
  146.         }
  147.         psz_parser = strchr( psz_parser, ':' );
  148.         if( psz_parser ) psz_parser++; /* skip the ':' */
  149.     }
  150.     free( psz_config );
  151.     return false;
  152. }