diff --git a/src/Model.c b/src/Model.c index ca6e257a3..fed0298ac 100644 --- a/src/Model.c +++ b/src/Model.c @@ -2369,6 +2369,7 @@ static void RegisterDefaultModels(void) { HumanoidModel_Register(); MakeModel(&human_model); Models.Human = &human_model; + BlockModel_Register(); ChickenModel_Register(); CreeperModel_Register(); @@ -2379,7 +2380,6 @@ static void RegisterDefaultModels(void) { SpiderModel_Register(); ZombieModel_Register(); - BlockModel_Register(); ChibiModel_Register(); HeadModel_Register(); SittingModel_Register(); diff --git a/src/Platform_Windows.c b/src/Platform_Windows.c index 13c5b9687..9db4f92e8 100644 --- a/src/Platform_Windows.c +++ b/src/Platform_Windows.c @@ -663,16 +663,20 @@ static cc_result Process_RawGetExePath(cc_winstring* path, int* len) { } cc_result Process_StartGame2(const cc_string* args, int numArgs) { + union STARTUPINFO_union { + STARTUPINFOW wide; + STARTUPINFOA ansi; + } si = { 0 }; // less compiler warnings this way + cc_winstring path; cc_string argv; char argvBuffer[NATIVE_STR_LEN]; - STARTUPINFOW si = { 0 }; PROCESS_INFORMATION pi = { 0 }; cc_winstring raw; cc_result res; int len, i; if ((res = Process_RawGetExePath(&path, &len))) return res; - si.cb = sizeof(STARTUPINFOW); + si.wide.cb = sizeof(STARTUPINFOW); String_InitArray(argv, argvBuffer); /* Game doesn't actually care about argv[0] */ @@ -689,11 +693,11 @@ cc_result Process_StartGame2(const cc_string* args, int numArgs) { if (path.uni[0]) { if (!CreateProcessW(path.uni, raw.uni, NULL, NULL, - false, 0, NULL, NULL, &si, &pi)) return GetLastError(); + false, 0, NULL, NULL, &si.wide, &pi)) return GetLastError(); } else { /* Windows 9x does not support W API functions */ if (!CreateProcessA(path.ansi, raw.ansi, NULL, NULL, - false, 0, NULL, NULL, &si, &pi)) return GetLastError(); + false, 0, NULL, NULL, &si.ansi, &pi)) return GetLastError(); } /* Don't leak memory for process return code */ diff --git a/src/SSL.c b/src/SSL.c index a2d552561..317a36142 100644 --- a/src/SSL.c +++ b/src/SSL.c @@ -6,6 +6,7 @@ #define NOSERVICE #define NOMCX #define NOIME +#define NOMINMAX #include #define SECURITY_WIN32 #include diff --git a/src/Window_Win.c b/src/Window_Win.c index 456bfdb3f..624b11da4 100644 --- a/src/Window_Win.c +++ b/src/Window_Win.c @@ -558,9 +558,13 @@ static void ShowDialogCore(const char* title, const char* msg) { static cc_result OpenSaveFileDialog(const cc_string* filters, FileDialogCallback callback, cc_bool load, const char* const* fileExts, const cc_string* defaultName) { + union OPENFILENAME_union { + OPENFILENAMEW wide; + OPENFILENAMEA ansi; + } ofn = { 0 }; // less compiler warnings this way + cc_string path; char pathBuffer[NATIVE_STR_LEN]; cc_winstring str = { 0 }; - OPENFILENAMEW ofn = { 0 }; cc_winstring filter; cc_result res; BOOL ok; @@ -571,35 +575,37 @@ static cc_result OpenSaveFileDialog(const cc_string* filters, FileDialogCallback /* NOTE: OPENFILENAME_SIZE_VERSION_400 is used instead of sizeof(OFN), because the size of */ /* OPENFILENAME increased after Windows 9x/NT4 with the addition of pvReserved and later fields */ /* (and Windows 9x/NT4 return an error if a lStructSize > OPENFILENAME_SIZE_VERSION_400 is used) */ - ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; + ofn.wide.lStructSize = OPENFILENAME_SIZE_VERSION_400; /* also note that this only works when you *don't* have OFN_HOOK in Flags - if you do, then */ /* on modern Windows versions the dialogs are altered to show an old Win 9x style appearance */ /* (see https://github.com/geany/geany/issues/578 for example of this problem) */ - ofn.hwndOwner = win_handle; - ofn.lpstrFile = str.uni; - ofn.nMaxFile = MAX_PATH; - ofn.lpstrFilter = filter.uni; - ofn.nFilterIndex = 1; - ofn.Flags = OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | (load ? OFN_FILEMUSTEXIST : OFN_OVERWRITEPROMPT); + ofn.wide.hwndOwner = win_handle; + ofn.wide.lpstrFile = str.uni; + ofn.wide.nMaxFile = MAX_PATH; + ofn.wide.lpstrFilter = filter.uni; + ofn.wide.nFilterIndex = 1; + ofn.wide.Flags = OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | (load ? OFN_FILEMUSTEXIST : OFN_OVERWRITEPROMPT); String_InitArray(path, pathBuffer); - ok = load ? GetOpenFileNameW(&ofn) : GetSaveFileNameW(&ofn); + ok = load ? GetOpenFileNameW(&ofn.wide) : GetSaveFileNameW(&ofn.wide); if (ok) { /* Successfully got a unicode filesystem path */ - for (i = 0; i < MAX_PATH && str.uni[i]; i++) { + for (i = 0; i < MAX_PATH && str.uni[i]; i++) + { String_Append(&path, Convert_CodepointToCP437(str.uni[i])); } } else if ((res = CommDlgExtendedError()) == 2) { /* CDERR_INITIALIZATION - probably running on Windows 9x */ - ofn.lpstrFile = str.ansi; - ofn.lpstrFilter = filter.ansi; + ofn.ansi.lpstrFile = str.ansi; + ofn.ansi.lpstrFilter = filter.ansi; - ok = load ? GetOpenFileNameA(&ofn) : GetSaveFileNameA(&ofn); + ok = load ? GetOpenFileNameA(&ofn.ansi) : GetSaveFileNameA(&ofn.ansi); if (!ok) return CommDlgExtendedError(); - for (i = 0; i < MAX_PATH && str.ansi[i]; i++) { + for (i = 0; i < MAX_PATH && str.ansi[i]; i++) + { String_Append(&path, str.ansi[i]); } } else { @@ -607,8 +613,8 @@ static cc_result OpenSaveFileDialog(const cc_string* filters, FileDialogCallback } /* Add default file extension if user didn't provide one */ - if (!load && ofn.nFileExtension == 0 && ofn.nFilterIndex > 0) { - String_AppendConst(&path, fileExts[ofn.nFilterIndex - 1]); + if (!load && ofn.wide.nFileExtension == 0 && ofn.wide.nFilterIndex > 0) { + String_AppendConst(&path, fileExts[ofn.wide.nFilterIndex - 1]); } callback(&path); return 0;