mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Patch miniz bundled version to support unicode on Windows.
This commit is contained in:
		
							parent
							
								
									d5d6af1361
								
							
						
					
					
						commit
						8fc1eba652
					
				
					 1 changed files with 29 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue