summaryrefslogtreecommitdiff
path: root/src/libjvm-java.c
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2018-05-29 03:55:32 +0300
committerJari Vetoniemi <mailroxas@gmail.com>2018-05-29 03:55:32 +0300
commit570009a8e49a8c999455f4804ce1c48acaf7df8e (patch)
treecc1baaf6a3c5340410482780f1f0729e4fb424a7 /src/libjvm-java.c
parentdd9ffa55195ee6313bed3b505dc3c6769b92d360 (diff)
jvm/libjvm-*: implement stuff
Wolf simulator (lol) starts working
Diffstat (limited to 'src/libjvm-java.c')
-rw-r--r--src/libjvm-java.c62
1 files changed, 60 insertions, 2 deletions
diff --git a/src/libjvm-java.c b/src/libjvm-java.c
index 6bccb70..3a5a47c 100644
--- a/src/libjvm-java.c
+++ b/src/libjvm-java.c
@@ -2,6 +2,7 @@
#include <stdarg.h>
#include <stdio.h>
#include <stdbool.h>
+#include <string.h>
#include <assert.h>
#include <err.h>
#include <dlfcn.h>
@@ -33,14 +34,14 @@ java_lang_System_load(JNIEnv *env, jobject object, va_list args)
}
jclass
-java_lang_Object_getClass(JNIEnv *env, jobject object, va_list args)
+java_lang_Object_getClass(JNIEnv *env, jobject object)
{
assert(env && object);
return (*env)->GetObjectClass(env, object);
}
jobject
-java_lang_Class_getClassLoader(JNIEnv *env, jobject object, va_list args)
+java_lang_Class_getClassLoader(JNIEnv *env, jobject object)
{
assert(env && object);
static jobject sv;
@@ -63,5 +64,62 @@ java_io_File_getPath(JNIEnv *env, jobject object, va_list args)
{
assert(env && object);
// FIXME: see comment on `android_content_Context_getExternalFilesDir`
+#if WOLF
+ return (*env)->NewStringUTF(env, "/mnt/media/dev/android2gnulinux/local/data/com.swiftappskom.thewolfrpg/files");
+#else
return (*env)->NewStringUTF(env, "/mnt/media/dev/android2gnulinux/local/data/com.miHoYo.bh3oversea/files");
+#endif
+}
+
+jstring
+java_io_File_getParent(JNIEnv *env, jobject object, va_list args)
+{
+ return (*env)->NewStringUTF(env, "/mnt/media/dev/android2gnulinux/local/data/com.miHoYo.bh3oversea");
+}
+
+jboolean
+java_lang_String_equals(JNIEnv *env, jobject object, va_list args)
+{
+ assert(env && object);
+ jstring str = va_arg(args, jstring);
+ const char *utf1 = (*env)->GetStringUTFChars(env, object, NULL);
+ const char *utf2 = (*env)->GetStringUTFChars(env, str, NULL);
+ const jboolean equal = (utf1 == utf2 || (utf1 && utf2 && !strcmp(utf1, utf2)));
+ (*env)->ReleaseStringUTFChars(env, object, utf1);
+ (*env)->ReleaseStringUTFChars(env, str, utf2);
+ return equal;
+}
+
+jclass
+java_lang_Class_forName(JNIEnv *env, jobject object, va_list args)
+{
+ assert(env && object);
+ jstring str = va_arg(args, jstring);
+ const char *utf = (*env)->GetStringUTFChars(env, str, NULL);
+ return (*env)->FindClass(env, utf);
+}
+
+jstring
+java_util_Locale_getLanguage(JNIEnv *env, jobject object)
+{
+ assert(env && object);
+ return (*env)->NewStringUTF(env, "en");
+}
+
+jstring
+java_util_Locale_getCountry(JNIEnv *env, jobject object)
+{
+ assert(env && object);
+ return (*env)->NewStringUTF(env, "US");
+}
+
+#include "jvm/jvm.h"
+#include <stdint.h>
+
+jstring
+java_lang_Class_getName(JNIEnv *env, jobject object)
+{
+ assert(env && object);
+ const struct jvm *jvm = jnienv_get_jvm(env);
+ return (*env)->NewStringUTF(env, jvm->objects[(uintptr_t)object - 1].klass.name.data);
}