[vlc-commits] src/input: add a new input option flag to replace values of existing options
David Fuhrmann
git at videolan.org
Tue May 13 21:15:46 CEST 2014
vlc | branch: master | David Fuhrmann <dfuhrmann at videolan.org> | Sat May 10 17:34:27 2014 +0200| [ba82f10c7108719e85413ee518e53249a549db85] | committer: 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
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ba82f10c7108719e85413ee518e53249a549db85
---
include/vlc_input_item.h | 7 +++++++
src/input/item.c | 22 ++++++++++++++++++++++
2 files changed, 29 insertions(+)
diff --git a/include/vlc_input_item.h b/include/vlc_input_item.h
index 944ac2f..dcd38c9 100644
--- a/include/vlc_input_item.h
+++ b/include/vlc_input_item.h
@@ -179,6 +179,13 @@ 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.
+ * This option and VLC_INPUT_OPTION_UNIQUE are
+ * mutually exclusive. */
+ VLC_INPUT_OPTION_REPLACE = 0x200,
};
/**
diff --git a/src/input/item.c b/src/input/item.c
index b27250b..30c6d3a 100644
--- a/src/input/item.c
+++ b/src/input/item.c
@@ -473,6 +473,28 @@ int input_item_AddOption( input_item_t *p_input, const char *psz_option,
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);
if (flagv == NULL)
{
More information about the vlc-commits
mailing list