[vlc-devel] [PATCH 2/3] src/input: add a new input option flag to replace values of existing options
Rémi Denis-Courmont
remi at remlab.net
Sun May 11 03:42:32 CEST 2014
Le 2014-05-10 18:42, david.fuhrmann at gmail.com a écrit :
> From: David Fuhrmann <dfuhrmann at videolan.org>
>
> 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.
>
> This can be used for instance to change the starttime option.
>
> refs #11471
> ---
> include/vlc_input_item.h | 5 +++++
> src/input/item.c | 23 +++++++++++++++++++++++
> 2 files changed, 28 insertions(+)
>
> diff --git a/include/vlc_input_item.h b/include/vlc_input_item.h
> index 944ac2f..d8ffd34 100644
> --- a/include/vlc_input_item.h
> +++ b/include/vlc_input_item.h
> @@ -179,6 +179,11 @@ enum input_item_option_e
> /* Add the option, unless the same option
> * is already present. */
> 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. */
> + VLC_INPUT_OPTION_REPLACE = 0x400,
> };
>
> /**
> diff --git a/src/input/item.c b/src/input/item.c
> index b27250b..36e1279 100644
> --- a/src/input/item.c
> +++ b/src/input/item.c
> @@ -473,6 +473,29 @@ int input_item_AddOption( input_item_t *p_input,
> const char *psz_option,
> goto out;
> }
>
> + if (flags & VLC_INPUT_OPTION_REPLACE)
That won't work if UNIQUE was set too.
> + {
> + /* search for option format "option=value" */
> +
> + const char *psz_found = strchr( psz_option, '=' );
> + if( unlikely( psz_found == NULL ) )
> + {
> + err = VLC_EGENERIC;
> + goto out;
Uh, that does not seem right?
> + }
> +
> + 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);
> if (flagv == NULL)
> {
--
Rémi Denis-Courmont
More information about the vlc-devel
mailing list