[vlc-devel] commit: Fix opening of file:// URIs (not tested on Windows) ( Rémi Denis-Courmont )
git version control
git at videolan.org
Fri Jun 12 18:45:29 CEST 2009
vlc | branch: 1.0-bugfix | Rémi Denis-Courmont <remi at remlab.net> | Fri Jun 12 19:44:35 2009 +0300| [5377d1df8caf79bd6fb195daf91b918e70018d6a] | committer: Rémi Denis-Courmont
Fix opening of file:// URIs (not tested on Windows)
(cherry picked from commit 81a05711bb6d5ff26da0cce4ed1e0cf650310184)
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5377d1df8caf79bd6fb195daf91b918e70018d6a
---
src/input/input.c | 42 ++++++++++++++++++++++++++++++------------
1 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/src/input/input.c b/src/input/input.c
index a87bff8..3ddc367 100644
--- a/src/input/input.c
+++ b/src/input/input.c
@@ -2343,6 +2343,36 @@ static int InputSourceInit( input_thread_t *p_input,
/* Split uri */
input_SplitMRL( &psz_access, &psz_demux, &psz_path, psz_dup );
+ /* FIXME: file:// handling plugins do not support URIs properly...
+ * So we pre-decoded the URI to a path for them. Note that we do not do it
+ * for non-standard VLC-specific schemes. */
+ if( !strcmp( psz_access, "file" ) )
+ {
+ if( psz_path[0] != '/' )
+ { /* host specified -> not supported currently */
+ msg_Err( p_input, "cannot open remote file `%s://%s'",
+ psz_access, psz_path );
+ msg_Info( p_input, "Did you mean `%s:///%s'?",
+ psz_access, psz_path );
+ goto error;
+ }
+ /* Remove HTML anchor if present (not supported). */
+ char *p = strchr( psz_path, '#' );
+ if( p )
+ *p = '\0';
+ /* Then URI-decode the path. */
+ decode_URI( psz_path );
+#ifdef WIN32
+ /* Strip leading slash in front of the drive letter */
+ psz_path++;
+#endif
+#if (DIR_SEP_CHAR != '/')
+ /* Turn slashes into anti-slashes */
+ for( char *s = strchr( psz_path, '/' ); s; s = strchr( s + 1, '/' ) )
+ *s = DIR_SEP_CHAR;
+#endif
+ }
+
msg_Dbg( p_input, "`%s' gives access `%s' demux `%s' path `%s'",
psz_mrl, psz_access, psz_demux, psz_path );
if( !p_input->b_preparsing )
@@ -2442,18 +2472,6 @@ static int InputSourceInit( input_thread_t *p_input,
{
/* Now try a real access */
in->p_access = access_New( p_input, psz_access, psz_demux, psz_path );
-
- /* Access failed, URL encoded ? */
- if( in->p_access == NULL && strchr( psz_path, '%' ) )
- {
- decode_URI( psz_path );
-
- msg_Dbg( p_input, "retrying with access `%s' demux `%s' path `%s'",
- psz_access, psz_demux, psz_path );
-
- in->p_access = access_New( p_input,
- psz_access, psz_demux, psz_path );
- }
if( in->p_access == NULL )
{
msg_Err( p_input, "open of `%s' failed: %s", psz_mrl,
More information about the vlc-devel
mailing list