diff --git a/modules/access/zip/zipaccess.c b/modules/access/zip/zipaccess.c index e1ab43b7fcb97ec3f76ae0073a3430dc350bcf6f..3689e12f2445767e8901689dbef983e92bcf3f94 100644 --- a/modules/access/zip/zipaccess.c +++ b/modules/access/zip/zipaccess.c @@ -64,7 +64,7 @@ int AccessOpen( vlc_object_t *p_this ) int i_ret = VLC_EGENERIC; unzFile file = 0; - char *psz_path = NULL, *psz_sep = NULL; + char *psz_pathToZip = NULL, *psz_path = NULL, *psz_sep = NULL; p_access->p_sys = p_sys = (access_sys_t*) calloc( 1, sizeof( access_sys_t ) ); @@ -78,6 +78,7 @@ int AccessOpen( vlc_object_t *p_this ) return VLC_EGENERIC; *psz_sep = '\0'; + psz_pathToZip = unescape_URI_duplicate( psz_path ); p_sys->psz_fileInzip = strdup( psz_sep + 1 ); /* Define IO functions */ @@ -93,10 +94,10 @@ int AccessOpen( vlc_object_t *p_this ) p_func->opaque = p_access; /* Open zip archive */ - file = p_access->p_sys->zipFile = unzOpen2( psz_path, p_func ); + file = p_access->p_sys->zipFile = unzOpen2( psz_pathToZip, p_func ); if( !file ) { - msg_Err( p_access, "not a valid zip archive: '%s'", psz_path ); + msg_Err( p_access, "not a valid zip archive: '%s'", psz_pathToZip ); goto exit; } @@ -130,6 +131,7 @@ exit: free( p_sys ); } + free( psz_pathToZip ); free( psz_path ); return i_ret; } diff --git a/modules/access/zip/zipstream.c b/modules/access/zip/zipstream.c index 940d5f499201c31ffccb13620b9af198d501b690..c29d11f064c9516c713bb236eae76037f7ef67bd 100644 --- a/modules/access/zip/zipstream.c +++ b/modules/access/zip/zipstream.c @@ -488,8 +488,8 @@ static int WriteXSPF( char **pp_buffer, vlc_array_t *p_filenames, /* Root node */ node *playlist = new_node( psz_zip ); - /* Web-Encode the URI and append '|' */ - char *psz_pathtozip = make_URI( psz_zippath ); + /* Web-Encode the URI and append '!' */ + char *psz_pathtozip = vlc_UrlEncode( psz_zippath ); if( astrcatf( &psz_pathtozip, ZIP_SEP ) < 0 ) return -1; int i_track = 0; @@ -516,6 +516,11 @@ static int WriteXSPF( char **pp_buffer, vlc_array_t *p_filenames, char *psz_path = strdup( psz_pathtozip ); if( astrcatf( &psz_path, psz_name ) < 0 ) return -1; + /* Double url-encode */ + char *psz_tmp = psz_path; + psz_path = vlc_UrlEncode( psz_tmp ); + free( psz_tmp ); + /* Track information */ if( astrcatf( pp_buffer, " \n" @@ -567,6 +572,8 @@ static int WriteXSPF( char **pp_buffer, vlc_array_t *p_filenames, /* Close extension and playlist */ if( astrcatf( pp_buffer, " \n\n" ) < 0 ) return -1; + /* printf( "%s", *pp_buffer ); */ + free_all_node( playlist ); return VLC_SUCCESS;