Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-08-29 21:05:14 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-08-29 21:06:11 +0400
commit526ae635d191d0245fc2c0923130ed968891d6a0 (patch)
tree2d201d9399eef6bfd8238b668ce449ee7987b499 /source
parentcba2e0afa7525f93d1834cc5de6ca659547fdc5a (diff)
Fix T41629: Won't open blend files with non-Latin charasters in the name
Diffstat (limited to 'source')
-rw-r--r--source/creator/CMakeLists.txt2
-rw-r--r--source/creator/creator_launch_win.c47
2 files changed, 32 insertions, 17 deletions
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 <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;
}