[vlc-commits] skins2(Win): fix multibyte issue for vlt filename (zip format)
Erwan Tulou
git at videolan.org
Fri Jun 12 21:48:56 CEST 2015
vlc | branch: master | Erwan Tulou <erwan10 at videolan.org> | Thu Jun 11 20:53:06 2015 +0200| [1ac910a5f378a77d88469facf830055877701d3c] | committer: Erwan Tulou
skins2(Win): fix multibyte issue for vlt filename (zip format)
On Windows, unzOpen() doesn't fully support Microsoft wide char.
So, use unzOpen2() with a callback to use vlc_fopen() instead of
the default fopen().
This fixes situations where a skin filename or path contains
e.g Japanese characters whatever the Windows locale.
For OS2 and Linux, no functional change.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1ac910a5f378a77d88469facf830055877701d3c
---
modules/gui/skins2/src/theme_loader.cpp | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/modules/gui/skins2/src/theme_loader.cpp b/modules/gui/skins2/src/theme_loader.cpp
index 1fba110..083fa79 100644
--- a/modules/gui/skins2/src/theme_loader.cpp
+++ b/modules/gui/skins2/src/theme_loader.cpp
@@ -78,7 +78,7 @@ bool ThemeLoader::load( const string &fileName )
// file...
#if defined( HAVE_ZLIB_H )
- if( ! extract( sToLocale( fileName ) ) && ! parse( path, fileName ) )
+ if( ! extract( fileName ) && ! parse( path, fileName ) )
return false;
#else
if( ! parse( path, fileName ) )
@@ -134,13 +134,28 @@ bool ThemeLoader::extractTarGz( const string &tarFile, const string &rootDir )
return true;
}
+static voidpf ZCALLBACK open_vlc( voidpf opaque, const char *filename, int mode)
+{
+ (void)mode;
+ intf_thread_t *pIntf = (intf_thread_t *)opaque;
+
+ FILE *stream = vlc_fopen( filename, "rb" );
+ if( stream == NULL )
+ msg_Dbg( pIntf, "vlc_fopen failed for %s", filename );
+ return stream;
+}
bool ThemeLoader::extractZip( const string &zipFile, const string &rootDir )
{
bool b_isWsz = strstr( zipFile.c_str(), ".wsz" );
// Try to open the ZIP file
- unzFile file = unzOpen( zipFile.c_str() );
+ zlib_filefunc_def descr;
+ fill_fopen_filefunc( &descr );
+ descr.zopen_file = open_vlc;
+ descr.opaque = getIntf();
+
+ unzFile file = unzOpen2( zipFile.c_str(), &descr );
if( file == 0 )
{
msg_Dbg( getIntf(), "failed to open %s as a zip file",
More information about the vlc-commits
mailing list