Unverified Commit 2b43feb1 authored by Nikolay Igotti's avatar Nikolay Igotti Committed by GitHub

Fix Windows loading from non-ASCII paths (#91)

parent 9f17aba6
......@@ -4,6 +4,7 @@
#if SK_BUILD_FOR_WIN
#include <windows.h>
#include <strsafe.h>
#else
#include <dlfcn.h>
#endif
......@@ -28,7 +29,11 @@ bool check(JNIEnv* env, const char* msg) {
}
#endif
#if SK_BUILD_FOR_WIN
void findJdkHome(JNIEnv* env, wchar_t* path, int pathLength) {
#else
void findJdkHome(JNIEnv* env, char* path, int pathLength) {
#endif
jclass systemClass = env->FindClass("java/lang/System");
jmethodID getPropertyMethod = env->GetStaticMethodID(
systemClass,
......@@ -36,27 +41,33 @@ void findJdkHome(JNIEnv* env, char* path, int pathLength) {
"(Ljava/lang/String;)Ljava/lang/String;");
jstring javaHomeString = env->NewStringUTF("java.home");
jstring propertyString = (jstring) env->CallStaticObjectMethod(systemClass, getPropertyMethod, javaHomeString);
#if SK_BUILD_FOR_WIN
const jchar* propertyChars = env->GetStringChars(propertyString, 0);
StringCchPrintfW(path, pathLength, L"%ls", propertyChars);
env->ReleaseStringChars(propertyString, propertyChars);
#else
const char* propertyChars = env->GetStringUTFChars(propertyString, 0);
snprintf(path, pathLength, "%s", propertyChars);
env->ReleaseStringUTFChars(propertyString, propertyChars);
#endif
}
extern "C" jboolean Skiko_GetAWT(JNIEnv *env, JAWT *awt) {
static JAWT_GetAWT_t func = nullptr;
#if SK_BUILD_FOR_WIN
if (!func) {
char jdkHome[FILENAME_MAX];
wchar_t jdkHome[FILENAME_MAX];
findJdkHome(env, jdkHome, sizeof(jdkHome));
char path[FILENAME_MAX];
snprintf(path, sizeof(path), "%s\\bin\\jawt.dll", jdkHome);
HMODULE lib = LoadLibrary(path);
wchar_t path[FILENAME_MAX];
StringCchPrintfW(path, sizeof(path), L"%ls\\bin\\jawt.dll", jdkHome);
HMODULE lib = LoadLibraryW(path);
if (!lib) {
fprintf(stderr, "Cannot open %s\n", path);
fprintf(stderr, "Cannot open %ls\n", path);
abort();
}
func = reinterpret_cast<JAWT_GetAWT_t>(GetProcAddress(lib, "JAWT_GetAWT"));
if (!func) {
fprintf(stderr, "Cannot find JAWT_GetAWT in %s\n", path);
fprintf(stderr, "Cannot find JAWT_GetAWT in %ls\n", path);
abort();
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment