Commit ba82f10c authored by David Fuhrmann's avatar David Fuhrmann

src/input: add a new input option flag to replace values of existing options

This flag can be used with input_item_AddOption to replace the value
of an input option, if this option already exists. Otherwise, the
new option is added as usual.

refs #11471
parent fb18dbad
...@@ -179,6 +179,13 @@ enum input_item_option_e ...@@ -179,6 +179,13 @@ enum input_item_option_e
/* Add the option, unless the same option /* Add the option, unless the same option
* is already present. */ * is already present. */
VLC_INPUT_OPTION_UNIQUE = 0x100, VLC_INPUT_OPTION_UNIQUE = 0x100,
/* Search for an existing option in the format
* option=value and replaces the first one found.
* Else, the new option is added.
* This option and VLC_INPUT_OPTION_UNIQUE are
* mutually exclusive. */
VLC_INPUT_OPTION_REPLACE = 0x200,
}; };
/** /**
......
...@@ -473,6 +473,28 @@ int input_item_AddOption( input_item_t *p_input, const char *psz_option, ...@@ -473,6 +473,28 @@ int input_item_AddOption( input_item_t *p_input, const char *psz_option,
goto out; goto out;
} }
if (flags & VLC_INPUT_OPTION_REPLACE)
{
/* search for option format "option=value" */
const char *psz_found = strchr( psz_option, '=' );
if( likely( psz_found ) )
{
for( int i = 0 ; i < p_input->i_options; i++ )
{
if( !strncmp( p_input->ppsz_options[i], psz_option,
psz_found - psz_option + 1 /* = */ ) )
{
free( p_input->ppsz_options[i] );
p_input->ppsz_options[i] = strdup( psz_option );
goto out;
}
}
}
}
uint8_t *flagv = realloc (p_input->optflagv, p_input->optflagc + 1); uint8_t *flagv = realloc (p_input->optflagv, p_input->optflagc + 1);
if (flagv == NULL) if (flagv == NULL)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment