diff options
author | Jari Vetoniemi <mailroxas@gmail.com> | 2018-06-02 21:58:50 +0300 |
---|---|---|
committer | Jari Vetoniemi <mailroxas@gmail.com> | 2018-06-02 21:58:50 +0300 |
commit | 6e5e3de6214bb792b126d481598e3e9313ea3bbb (patch) | |
tree | 983da788b4fce10f4da1b0651b661652a6f6ec10 | |
parent | d56eea0f7f348984c5beeb81b8b7e2253dcb1b70 (diff) |
jvm: Store class names like they are in java
com.foo.bar instead of com/foo/bar, only convert to latter form when needed.
-rw-r--r-- | src/app.c | 2 | ||||
-rw-r--r-- | src/jvm/jvm.c | 20 |
2 files changed, 8 insertions, 14 deletions
@@ -39,7 +39,7 @@ main(int argc, const char *argv[]) JNI_OnLoad(&jvm.vm, NULL); - static const char *unity_player_class = "com/unity3d/player/UnityPlayer"; + static const char *unity_player_class = "com.unity3d.player.UnityPlayer"; void (*native_init_jni)(JNIEnv*, jobject, jobject) = jvm_get_native_method(&jvm, unity_player_class, "initJni"); void (*native_done)(JNIEnv*, jobject) = jvm_get_native_method(&jvm, unity_player_class, "nativeDone"); void (*native_file)(JNIEnv*, jobject, jstring) = jvm_get_native_method(&jvm, unity_player_class, "nativeFile"); diff --git a/src/jvm/jvm.c b/src/jvm/jvm.c index a15f2b1..f54aad5 100644 --- a/src/jvm/jvm.c +++ b/src/jvm/jvm.c @@ -320,18 +320,13 @@ JNIEnv_DefineClass(JNIEnv* p0, const char* p1, jobject p2, const jbyte* p3, jsiz return NULL; } -static char* -cstr_replace(char *cstr, const char replace, const char with) +static void +cstr_replace(char *cstr, const char *replace, const char with) { - assert(cstr && replace != with); - - if (replace == with) - return cstr; - + assert(cstr && replace); char *s = cstr; - while ((s = strchr(s, replace))) - *s = with; - return cstr; + for (size_t i; *s && (i = strcspn(s, replace)) && s[i]; s += (i + 1)) + s[i] = with; } static jclass @@ -340,7 +335,7 @@ jvm_make_class(struct jvm *jvm, const char *name) assert(jvm && name); struct jvm_object o = { .this_klass = (jclass)1, .type = JVM_OBJECT_CLASS }; jvm_string_set_cstr(&o.klass.name, name, true); - cstr_replace((char*)o.klass.name.data, '.', '/'); + cstr_replace((char*)o.klass.name.data, "/", '.'); return jvm_add_object_if_not_there(jvm, &o); } @@ -558,8 +553,7 @@ jvm_form_symbol(struct jvm *jvm, const struct jvm_method *method, char *symbol, assert(jvm && method); verbose("%s::%s::%s", jvm_get_object_of_type(jvm, method->klass, JVM_OBJECT_CLASS)->klass.name.data, method->name.data, method->signature.data); snprintf(symbol, symbol_sz, "%s_%s", jvm_get_object_of_type(jvm, method->klass, JVM_OBJECT_CLASS)->klass.name.data, method->name.data); - cstr_replace(symbol, '/', '_'); - cstr_replace(symbol, '$', '_'); + cstr_replace(symbol, "./$", '_'); } static void* |