Commit df79cc30 authored by nanahira's avatar nanahira

Merge branch 'patch-myfopen' of github.com:mercury233/ygopro into develop

parents b6437560 dd96a75a
...@@ -79,6 +79,21 @@ inline FILE* mywfopen(const wchar_t* filename, const char* mode) { ...@@ -79,6 +79,21 @@ inline FILE* mywfopen(const wchar_t* filename, const char* mode) {
return fp; return fp;
} }
#if !defined(_WIN32)
#define myfopen std::fopen
#elif defined(WDK_NTDDI_VERSION) && (WDK_NTDDI_VERSION >= 0x0A000005) // Redstone 4, Version 1803, Build 17134.
#define FOPEN_WINDOWS_SUPPORT_UTF8
#define myfopen std::fopen
#else
inline FILE* myfopen(const char* filename, const char* mode) {
wchar_t wfilename[256]{};
BufferIO::DecodeUTF8(filename, wfilename);
wchar_t wmode[20]{};
BufferIO::CopyCharArray(mode, wmode);
return _wfopen(wfilename, wmode);
}
#endif
#include <irrlicht.h> #include <irrlicht.h>
extern unsigned short PRO_VERSION; extern unsigned short PRO_VERSION;
......
...@@ -108,7 +108,7 @@ bool DataManager::LoadDB(const wchar_t* wfile) { ...@@ -108,7 +108,7 @@ bool DataManager::LoadDB(const wchar_t* wfile) {
return ret; return ret;
} }
bool DataManager::LoadStrings(const char* file) { bool DataManager::LoadStrings(const char* file) {
FILE* fp = std::fopen(file, "r"); FILE* fp = myfopen(file, "r");
if(!fp) if(!fp)
return false; return false;
char linebuf[TEXT_LINE_SIZE]{}; char linebuf[TEXT_LINE_SIZE]{};
...@@ -437,9 +437,7 @@ unsigned char* DataManager::ReadScriptFromIrrFS(const char* script_name, int* sl ...@@ -437,9 +437,7 @@ unsigned char* DataManager::ReadScriptFromIrrFS(const char* script_name, int* sl
return scriptBuffer; return scriptBuffer;
} }
unsigned char* DataManager::ReadScriptFromFile(const char* script_name, int* slen) { unsigned char* DataManager::ReadScriptFromFile(const char* script_name, int* slen) {
wchar_t fname[256]{}; FILE* fp = myfopen(script_name, "rb");
BufferIO::DecodeUTF8(script_name, fname);
FILE* fp = mywfopen(fname, "rb");
if (!fp) if (!fp)
return nullptr; return nullptr;
size_t len = std::fread(scriptBuffer, 1, sizeof scriptBuffer, fp); size_t len = std::fread(scriptBuffer, 1, sizeof scriptBuffer, fp);
......
...@@ -11,7 +11,7 @@ DeckManager deckManager; ...@@ -11,7 +11,7 @@ DeckManager deckManager;
void DeckManager::LoadLFListSingle(const char* path) { void DeckManager::LoadLFListSingle(const char* path) {
auto cur = _lfList.rend(); auto cur = _lfList.rend();
FILE* fp = std::fopen(path, "r"); FILE* fp = myfopen(path, "r");
char linebuf[256]{}; char linebuf[256]{};
wchar_t strBuffer[256]{}; wchar_t strBuffer[256]{};
if(fp) { if(fp) {
......
...@@ -1389,9 +1389,9 @@ void Game::RefreshBot() { ...@@ -1389,9 +1389,9 @@ void Game::RefreshBot() {
if(!gameConf.enable_bot_mode) if(!gameConf.enable_bot_mode)
return; return;
botInfo.clear(); botInfo.clear();
FILE* fp = std::fopen(GetLocaleDir("bot.conf"), "r"); FILE* fp = myfopen(GetLocaleDir("bot.conf"), "r");
if(!fp) if(!fp)
fp = std::fopen("bot.conf", "r"); fp = myfopen("bot.conf", "r");
char linebuf[256]{}; char linebuf[256]{};
char strbuf[256]{}; char strbuf[256]{};
if(fp) { if(fp) {
...@@ -1452,7 +1452,7 @@ void Game::RefreshBot() { ...@@ -1452,7 +1452,7 @@ void Game::RefreshBot() {
} }
} }
bool Game::LoadConfigFromFile(const char* file) { bool Game::LoadConfigFromFile(const char* file) {
FILE* fp = std::fopen(file, "r"); FILE* fp = myfopen(file, "r");
if(!fp){ if(!fp){
return false; return false;
} }
...@@ -1725,9 +1725,9 @@ void Game::LoadConfig() { ...@@ -1725,9 +1725,9 @@ void Game::LoadConfig() {
} }
void Game::SaveConfig() { void Game::SaveConfig() {
#ifdef YGOPRO_COMPAT_MYCARD #ifdef YGOPRO_COMPAT_MYCARD
FILE* fp = std::fopen("system.conf", "w"); FILE* fp = myfopen("system.conf", "w");
#else #else
FILE* fp = std::fopen("system_user.conf", "w"); FILE* fp = myfopen("system_user.conf", "w");
#endif //YGOPRO_COMPAT_MYCARD #endif //YGOPRO_COMPAT_MYCARD
std::fprintf(fp, "#config file\n#nickname & gamename should be less than 20 characters\n"); std::fprintf(fp, "#config file\n#nickname & gamename should be less than 20 characters\n");
char linebuf[CONFIG_LINE_SIZE]; char linebuf[CONFIG_LINE_SIZE];
...@@ -1993,7 +1993,7 @@ void Game::AddDebugMsg(const char* msg) { ...@@ -1993,7 +1993,7 @@ void Game::AddDebugMsg(const char* msg) {
} }
} }
void Game::ErrorLog(const char* msg) { void Game::ErrorLog(const char* msg) {
FILE* fp = std::fopen("error.log", "a"); FILE* fp = myfopen("error.log", "a");
if(!fp) if(!fp)
return; return;
time_t nowtime = std::time(nullptr); time_t nowtime = std::time(nullptr);
......
...@@ -25,8 +25,12 @@ void ClickButton(irr::gui::IGUIElement* btn) { ...@@ -25,8 +25,12 @@ void ClickButton(irr::gui::IGUIElement* btn) {
} }
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
#ifndef _WIN32 #if defined(FOPEN_WINDOWS_SUPPORT_UTF8)
std::setlocale(LC_CTYPE, "UTF-8"); std::setlocale(LC_CTYPE, ".UTF-8");
#elif defined(__APPLE__)
std::setlocale(LC_CTYPE, "C.UTF-8");
#elif !defined(_WIN32)
std::setlocale(LC_CTYPE, "");
#endif #endif
#ifdef __APPLE__ #ifdef __APPLE__
CFURLRef bundle_url = CFBundleCopyBundleURL(CFBundleGetMainBundle()); CFURLRef bundle_url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
......
...@@ -24,7 +24,7 @@ void Replay::BeginRecord() { ...@@ -24,7 +24,7 @@ void Replay::BeginRecord() {
#else #else
if(is_recording) if(is_recording)
std::fclose(fp); std::fclose(fp);
fp = std::fopen("./replay/_LastReplay.yrp", "wb"); fp = myfopen("./replay/_LastReplay.yrp", "wb");
if(!fp) if(!fp)
return; return;
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment