[vlc-commits] commit: Input location is always an URL ( Rémi Denis-Courmont )

git at videolan.org git at videolan.org
Sat Nov 6 17:40:43 CET 2010


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Nov  6 18:20:51 2010 +0200| [7ba4c3862850f59b84fa9210b0e77fbf86c20890] | committer: Rémi Denis-Courmont 

Input location is always an URL

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7ba4c3862850f59b84fa9210b0e77fbf86c20890
---

 src/input/input.c |   61 ++++++++++++++++++++++++----------------------------
 1 files changed, 28 insertions(+), 33 deletions(-)

diff --git a/src/input/input.c b/src/input/input.c
index 35da58b..b827753 100644
--- a/src/input/input.c
+++ b/src/input/input.c
@@ -2380,8 +2380,6 @@ static int InputSourceInit( input_thread_t *p_input,
         /* Preparsing is only for file:// */
         if( *psz_demux )
             goto error;
-        if( !*psz_access ) /* path without scheme:// */
-            psz_access = "file";
         if( strcmp( psz_access, "file" ) )
             goto error;
         msg_Dbg( p_input, "trying to pre-parse %s",  psz_path );
@@ -2996,52 +2994,49 @@ static void input_ChangeState( input_thread_t *p_input, int i_state )
 void input_SplitMRL( const char **ppsz_access, const char **ppsz_demux,
                      char **ppsz_path, char *psz_dup )
 {
-    const char *psz_access;
-    const char *psz_demux = "";
-    char *psz_path;
+    char *p;
 
-    /* Either there is an access/demux specification before ://
-     * or we have a plain local file path. */
-    psz_path = strstr( psz_dup, "://" );
-    if( psz_path != NULL )
+    /* Separate <path> from <access>[/<demux>]:// */
+    p = strstr( psz_dup, "://" );
+    if( p != NULL )
     {
-        *psz_path = '\0';
-        psz_path += 3; /* skips "://" */
-
-        psz_access = psz_dup;
-        /* We really don't want module name substitution here! */
-        if( psz_access[0] == '$' )
-            psz_access++;
-
-        /* Separate access from demux (<access>/<demux>://<path>) */
-        char *p = strchr( psz_access, '/' );
-        if( p )
-        {
-            *p = '\0';
-            psz_demux = p + 1;
-            if( psz_demux[0] == '$' )
-                psz_demux++;
-        }
+        *p = '\0';
+        p += 3; /* skips "://" */
+        *ppsz_path = p;
 
         /* Remove HTML anchor if present (not supported).
          * The hash symbol itself should be URI-encoded. */
-        p = strchr( psz_path, '#' );
+        p = strchr( p, '#' );
         if( p )
             *p = '\0';
     }
     else
     {
 #ifndef NDEBUG
-        fprintf( stderr, "%s(\"%s\"): not a valid URI!\n", __func__,
+        fprintf( stderr, "%s(\"%s\") probably not a valid URI!\n", __func__,
                  psz_dup );
 #endif
-        psz_path = psz_dup;
-        psz_access = "";
+        /* Note: this is a valid non const pointer to "": */
+        *ppsz_path = psz_dup + strlen( psz_dup );
+    }
+
+    /* Separate access from demux */
+    p = strchr( psz_dup, '/' );
+    if( p != NULL )
+    {
+        *(p++) = '\0';
+        if( p[0] == '$' )
+            p++;
+        *ppsz_demux = p;
     }
+    else
+        *ppsz_demux = "";
 
-    *ppsz_access = psz_access;
-    *ppsz_demux = psz_demux;
-    *ppsz_path = psz_path;
+    /* We really don't want module name substitution here! */
+    p = psz_dup;
+    if( p[0] == '$' )
+        p++;
+    *ppsz_access = p;
 }
 
 static inline bool next(char ** src)



More information about the vlc-commits mailing list