add fopen wrapper to support UTF8 paths/filenames under Windows.
This commit is contained in:
parent
ee1da52d77
commit
273fbe24f4
|
@ -229,6 +229,7 @@
|
||||||
<Unit filename="src/libui_sdl/libui/windows/winpublic.cpp" />
|
<Unit filename="src/libui_sdl/libui/windows/winpublic.cpp" />
|
||||||
<Unit filename="src/libui_sdl/libui/windows/winutil.cpp" />
|
<Unit filename="src/libui_sdl/libui/windows/winutil.cpp" />
|
||||||
<Unit filename="src/libui_sdl/main.cpp" />
|
<Unit filename="src/libui_sdl/main.cpp" />
|
||||||
|
<Unit filename="src/melon_fopen.h" />
|
||||||
<Unit filename="src/types.h" />
|
<Unit filename="src/types.h" />
|
||||||
<Unit filename="src/version.h" />
|
<Unit filename="src/version.h" />
|
||||||
<Unit filename="xp.manifest" />
|
<Unit filename="xp.manifest" />
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
#include "NDSCart.h"
|
#include "NDSCart.h"
|
||||||
#include "ARM.h"
|
#include "ARM.h"
|
||||||
|
|
||||||
|
#include "melon_fopen.h"
|
||||||
|
|
||||||
|
|
||||||
namespace NDSCart_SRAM
|
namespace NDSCart_SRAM
|
||||||
{
|
{
|
||||||
|
@ -92,7 +94,7 @@ void LoadSave(char* path)
|
||||||
strncpy(SRAMPath, path, 255);
|
strncpy(SRAMPath, path, 255);
|
||||||
SRAMPath[255] = '\0';
|
SRAMPath[255] = '\0';
|
||||||
|
|
||||||
FILE* f = fopen(path, "rb");
|
FILE* f = melon_fopen(path, "rb");
|
||||||
if (f)
|
if (f)
|
||||||
{
|
{
|
||||||
fseek(f, 0, SEEK_END);
|
fseek(f, 0, SEEK_END);
|
||||||
|
@ -624,7 +626,7 @@ void Write(u8 val, u32 hold)
|
||||||
|
|
||||||
if (islast && (CurCmd == 0x02 || CurCmd == 0x0A) && (SRAMLength > 0))
|
if (islast && (CurCmd == 0x02 || CurCmd == 0x0A) && (SRAMLength > 0))
|
||||||
{
|
{
|
||||||
FILE* f = fopen(SRAMPath, "wb");
|
FILE* f = melon_fopen(SRAMPath, "wb");
|
||||||
if (f)
|
if (f)
|
||||||
{
|
{
|
||||||
fwrite(SRAM, SRAMLength, 1, f);
|
fwrite(SRAM, SRAMLength, 1, f);
|
||||||
|
@ -817,7 +819,7 @@ bool LoadROM(const char* path, bool direct)
|
||||||
// TODO: streaming mode? for really big ROMs or systems with limited RAM
|
// TODO: streaming mode? for really big ROMs or systems with limited RAM
|
||||||
// for now we're lazy
|
// for now we're lazy
|
||||||
|
|
||||||
FILE* f = fopen(path, "rb");
|
FILE* f = melon_fopen(path, "rb");
|
||||||
if (!f)
|
if (!f)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
Copyright 2016-2017 StapleButter
|
||||||
|
|
||||||
|
This file is part of melonDS.
|
||||||
|
|
||||||
|
melonDS is free software: you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with melonDS. If not, see http://www.gnu.org/licenses/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MELON_FOPEN_H
|
||||||
|
#define MELON_FOPEN_H
|
||||||
|
|
||||||
|
#ifdef __WIN32__
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
static FILE* melon_fopen(const char* path, const char* mode)
|
||||||
|
{
|
||||||
|
int len = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0);
|
||||||
|
if (len < 1) return NULL;
|
||||||
|
WCHAR* fatass = new WCHAR[len];
|
||||||
|
int res = MultiByteToWideChar(CP_UTF8, 0, path, -1, fatass, len);
|
||||||
|
if (res != len) return NULL; // checkme?
|
||||||
|
|
||||||
|
// this will be more than enough
|
||||||
|
WCHAR fatmode[4];
|
||||||
|
fatmode[0] = mode[0];
|
||||||
|
fatmode[1] = mode[1];
|
||||||
|
fatmode[2] = mode[2];
|
||||||
|
fatmode[3] = 0;
|
||||||
|
|
||||||
|
return _wfopen(fatass, fatmode);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define melon_fopen fopen
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // MELON_FOPEN_H
|
Loading…
Reference in New Issue