mirror of
				https://github.com/eledio-devices/thirdparty-miniz.git
				synced 2025-10-31 00:32:38 +01:00 
			
		
		
		
	Merge pull request #203 from prezi/prezi-patch-2
Support for unicode characters in paths and filenames on windows
This commit is contained in:
		
							
								
								
									
										45
									
								
								miniz_zip.c
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								miniz_zip.c
									
									
									
									
									
								
							| @@ -40,19 +40,48 @@ extern "C" { | ||||
| #include <sys/stat.h> | ||||
|  | ||||
| #if defined(_MSC_VER) || defined(__MINGW64__) | ||||
|  | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #include <Windows.h> | ||||
|  | ||||
| static WCHAR* mz_utf8z_to_widechar(const char* str) | ||||
| { | ||||
|   int reqChars = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0); | ||||
|   WCHAR* wStr = (WCHAR*)malloc(reqChars * sizeof(WCHAR)); | ||||
|   MultiByteToWideChar(CP_UTF8, 0, str, -1, wStr, sizeof(WCHAR) * reqChars); | ||||
|   return wStr; | ||||
| } | ||||
|  | ||||
| static FILE *mz_fopen(const char *pFilename, const char *pMode) | ||||
| { | ||||
|     FILE *pFile = NULL; | ||||
|     fopen_s(&pFile, pFilename, pMode); | ||||
|     return pFile; | ||||
|   WCHAR* wFilename = mz_utf8z_to_widechar(pFilename); | ||||
|   WCHAR* wMode = mz_utf8z_to_widechar(pMode); | ||||
|   FILE* pFile = NULL; | ||||
|   errno_t err = _wfopen_s(&pFile, wFilename, wMode); | ||||
|   free(wFilename); | ||||
|   free(wMode); | ||||
|   return err ? NULL : pFile; | ||||
| } | ||||
|  | ||||
| static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) | ||||
| { | ||||
|     FILE *pFile = NULL; | ||||
|     if (freopen_s(&pFile, pPath, pMode, pStream)) | ||||
|         return NULL; | ||||
|     return pFile; | ||||
|   WCHAR* wPath = mz_utf8z_to_widechar(pPath); | ||||
|   WCHAR* wMode = mz_utf8z_to_widechar(pMode); | ||||
|   FILE* pFile = NULL; | ||||
|   errno_t err = _wfreopen_s(&pFile, wPath, wMode, pStream); | ||||
|   free(wPath); | ||||
|   free(wMode); | ||||
|   return err ? NULL : pFile; | ||||
| } | ||||
|  | ||||
| static int mz_stat64(const char *path, struct __stat64 *buffer) | ||||
| { | ||||
|   WCHAR* wPath = mz_utf8z_to_widechar(path); | ||||
|   int res = _wstat64(wPath, buffer); | ||||
|   free(wPath); | ||||
|   return res; | ||||
| } | ||||
|  | ||||
| #ifndef MINIZ_NO_TIME | ||||
| #include <sys/utime.h> | ||||
| #endif | ||||
| @@ -63,7 +92,7 @@ static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) | ||||
| #define MZ_FTELL64 _ftelli64 | ||||
| #define MZ_FSEEK64 _fseeki64 | ||||
| #define MZ_FILE_STAT_STRUCT _stat64 | ||||
| #define MZ_FILE_STAT _stat64 | ||||
| #define MZ_FILE_STAT mz_stat64  | ||||
| #define MZ_FFLUSH fflush | ||||
| #define MZ_FREOPEN mz_freopen | ||||
| #define MZ_DELETE_FILE remove | ||||
|   | ||||
		Reference in New Issue
	
	Block a user