Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src/miniz
diff options
context:
space:
mode:
authortamasmeszaros <meszaros.q@gmail.com>2019-05-31 17:54:42 +0300
committertamasmeszaros <meszaros.q@gmail.com>2019-05-31 17:54:42 +0300
commit8fc1eba652165869accaa4c9b7aad53203777137 (patch)
treeae3253341e09f3f5f467b862027e8c9e9a7347a1 /src/miniz
parentd5d6af1361ba73a24ceacd4a8b4346ece11b9a2e (diff)
Patch miniz bundled version to support unicode on Windows.
Diffstat (limited to 'src/miniz')
-rw-r--r--src/miniz/miniz.c32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/miniz/miniz.c b/src/miniz/miniz.c
index 9ded4c75a..8f5b97679 100644
--- a/src/miniz/miniz.c
+++ b/src/miniz/miniz.c
@@ -2987,17 +2987,43 @@ extern "C" {
#include <sys/stat.h>
#if defined(_MSC_VER) || defined(__MINGW64__)
+
+#include <windows.h>
+
+struct WArgs { const wchar_t *fname, *mode; };
+static struct WArgs utf8towide(const char* fname_utf8, const char * modestr)
+{
+ static wchar_t buff[4096];
+ static wchar_t mode[50];
+ struct WArgs ret = { .fname = NULL, .mode = NULL };
+
+ if(MultiByteToWideChar(CP_UTF8, 0, fname_utf8, -1, buff, 4096) == 0)
+ return ret;
+
+ if(MultiByteToWideChar(CP_UTF8, 0, modestr, -1, mode, 50) == 0)
+ return ret;
+
+ ret.fname = buff, ret.mode = mode;
+ return ret;
+}
static FILE *mz_fopen(const char *pFilename, const char *pMode)
{
FILE *pFile = NULL;
- fopen_s(&pFile, pFilename, pMode);
+
+ struct WArgs args = utf8towide(pFilename, pMode);
+ if(args.fname != NULL && args.mode != NULL)
+ if(_wfopen_s(&pFile, args.fname, args.mode)) return NULL;
+
return 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;
+
+ struct WArgs args = utf8towide(pPath, pMode);
+ if(args.fname != NULL && args.mode != NULL)
+ if(_wfreopen_s(&pFile, args.fname, args.mode, pStream)) return NULL;
+
return pFile;
}
#ifndef MINIZ_NO_TIME