[vlc-devel] [PATCH 2/3] src/input: add a new input option flag to replace values of existing options

david.fuhrmann at gmail.com david.fuhrmann at gmail.com
Sat May 10 17:42:56 CEST 2014


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)
+    {
+        /* search for option format "option=value" */
+
+        const char *psz_found = strchr( psz_option, '=' );
+        if( unlikely( psz_found == NULL ) )
+        {
+            err = VLC_EGENERIC;
+            goto out;
+        }
+
+        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)
     {
-- 
1.8.5.2 (Apple Git-48)




More information about the vlc-devel mailing list