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 --- SConstruct | 2 +- source/creator/CMakeLists.txt | 2 +- source/creator/creator_launch_win.c | 47 ++++++++++++++++++++++++------------- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/SConstruct b/SConstruct index 0c398f87256..b63d650b902 100644 --- a/SConstruct +++ b/SConstruct @@ -848,7 +848,7 @@ if 'blender' in B.targets or not env['WITH_BF_NOBLENDER']: lenv.Append(LINKFLAGS = env['PLATFORM_LINKFLAGS']) targetpath = B.root_build_dir + '/blender' launcher_obj = [env.Object(B.root_build_dir + 'source/creator/creator/creator_launch_win', ['#source/creator/creator_launch_win.c'])] - env.BlenderProg(B.root_build_dir, 'blender', [launcher_obj] + B.resources, [], [], 'blender') + env.BlenderProg(B.root_build_dir, 'blender', [launcher_obj] + B.resources, ['bf_utfconv'] + thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blender') env.BlenderProg(B.root_build_dir, blender_progname, creob + mainlist + thestatlibs + dobj, thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blender') if env['WITH_BF_PLAYER']: 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