From 526ae635d191d0245fc2c0923130ed968891d6a0 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 29 Aug 2014 23:05:14 +0600 Subject: Fix T41629: Won't open blend files with non-Latin charasters in the name --- source/creator/CMakeLists.txt | 2 +- source/creator/creator_launch_win.c | 47 ++++++++++++++++++++++++------------- 2 files changed, 32 insertions(+), 17 deletions(-) (limited to 'source') diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index fbda69225b3..87ba725a046 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -942,7 +942,7 @@ if(WIN32 AND NOT WITH_PYTHON_MODULE) ../icons/winblender.rc ) add_executable(blender-launcher ${LAUNCHER_SRC}) - target_link_libraries(blender-launcher ${PLATFORM_LINKLIBS}) + target_link_libraries(blender-launcher bf_intern_utfconv ${PLATFORM_LINKLIBS}) set_target_properties(blender PROPERTIES OUTPUT_NAME blender-app) set_target_properties(blender-launcher PROPERTIES OUTPUT_NAME blender) diff --git a/source/creator/creator_launch_win.c b/source/creator/creator_launch_win.c index 2d5baa42e14..a7e04b2dafc 100644 --- a/source/creator/creator_launch_win.c +++ b/source/creator/creator_launch_win.c @@ -24,40 +24,55 @@ */ /* Binary name to launch. */ -#define BLENDER_BINARY "blender-app.exe" +#define BLENDER_BINARY L"blender-app.exe" #define WIN32_LEAN_AND_MEAN #include #include + #include +#include + +#include "utfconv.h" + +#include "BLI_utildefines.h" +#include "BLI_winstuff.h" + +static void local_hacks_do(void) +{ + _putenv_s("OMP_WAIT_POLICY", "PASSIVE"); +} -int main(int argc, char **argv) +int main(int argc, const char **UNUSED(argv_c)) { PROCESS_INFORMATION processInformation = {0}; - STARTUPINFOA startupInfo = {0}; + STARTUPINFOW startupInfo = {0}; BOOL result; - char command[65536]; - int i, len = sizeof(command); - - _putenv_s("OMP_WAIT_POLICY", "PASSIVE"); + wchar_t command[65536]; + int i, len = sizeof(command) / sizeof(wchar_t); + wchar_t **argv_16 = CommandLineToArgvW(GetCommandLineW(), &argc); + int argci = 0; - startupInfo.cb = sizeof(startupInfo); + local_hacks_do(); - strncpy(command, BLENDER_BINARY, len - 1); - len -= strlen(BLENDER_BINARY); + wcsncpy(command, BLENDER_BINARY, len - 1); + len -= wcslen(BLENDER_BINARY); for (i = 1; i < argc; ++i) { - strncat(command, " \"", len - 2); - strncat(command, argv[i], len - 3); - len -= strlen(argv[i]) + 1; - strncat(command, "\"", len - 1); + wcsncat(command, L" \"", len - 2); + wcsncat(command, argv_16[i], len - 3); + len -= wcslen(argv_16[i]) + 1; + wcsncat(command, L"\"", len - 1); } - result = CreateProcessA(NULL, command, NULL, NULL, TRUE, + LocalFree(argv_16); + + startupInfo.cb = sizeof(startupInfo); + result = CreateProcessW(NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &startupInfo, &processInformation); if (!result) { - fprintf(stderr, "Error launching " BLENDER_BINARY "\n"); + fprintf(stderr, "%S\n", L"Error launching " BLENDER_BINARY); return EXIT_FAILURE; } -- cgit v1.2.3