[Bf-blender-cvs] [526ae63] master: Fix T41629: Won't open blend files with non-Latin charasters in the name

Sergey Sharybin noreply at git.blender.org
Fri Aug 29 19:07:20 CEST 2014


Commit: 526ae635d191d0245fc2c0923130ed968891d6a0
Author: Sergey Sharybin
Date:   Fri Aug 29 23:05:14 2014 +0600
Branches: master
https://developer.blender.org/rB526ae635d191d0245fc2c0923130ed968891d6a0

Fix T41629: Won't open blend files with non-Latin charasters in the name

===================================================================

M	SConstruct
M	source/creator/CMakeLists.txt
M	source/creator/creator_launch_win.c

===================================================================

diff --git a/SConstruct b/SConstruct
index 0c398f8..b63d650 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 fbda692..87ba725 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 2d5baa4..a7e04b2 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 <stdio.h>
 #include <stdlib.h>
+
 #include <windows.h>
+#include <Shellapi.h>
+
+#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;
 	}




More information about the Bf-blender-cvs mailing list