/* * static final native String mapLibraryName(String) */ _jc_object * _JC_JCNI_ATTR JCNI_java_lang_VMRuntime_mapLibraryName(_jc_env *env, _jc_object *string) { size_t name_len; char *fname; char *name; /* Check for null */ if (string == NULL) { _jc_post_exception(env, _JC_NullPointerException); _jc_throw_exception(env); } /* Decode string */ name_len = _jc_decode_string_utf8(env, string, NULL); if ((name = _JC_STACK_ALLOC(env, name_len + 1)) == NULL) { _jc_post_exception_info(env); _jc_throw_exception(env); } _jc_decode_string_utf8(env, string, name); /* Format filename */ if ((fname = _JC_FORMAT_STRING(env, _JC_LIBRARY_FMT, name)) == NULL) { _jc_post_exception_info(env); _jc_throw_exception(env); } /* Create new String object */ if ((string = _jc_new_string(env, fname, strlen(fname))) == NULL) _jc_throw_exception(env); /* Done */ return string; }
/* * public static final native boolean compileClasses(String) */ jboolean _JC_JCNI_ATTR JCNI_java_lang_VMCompiler_compileClasses(_jc_env *env, _jc_object *string) { _jc_jvm *const vm = env->vm; size_t slen; char *name; /* Decode string */ slen = _jc_decode_string_utf8(env, string, NULL); if ((name = _JC_STACK_ALLOC(env, slen + 1)) == NULL) { _jc_post_exception_info(env); _jc_throw_exception(env); } _jc_decode_string_utf8(env, string, name); /* XXX we are supposed to do some kind of pattern matching... */ /* Generate ELF object */ if (_jc_generate_object(env, vm->boot.loader, name) != JNI_OK) _jc_throw_exception(env); return JNI_TRUE; }
/* * static final native int nativeLoad(String, ClassLoader) */ jint _JC_JCNI_ATTR JCNI_java_lang_VMRuntime_nativeLoad(_jc_env *env, _jc_object *string, _jc_object *clobj) { _jc_jvm *const vm = env->vm; _jc_class_loader *loader; char *filename; size_t len; /* Check for null */ if (string == NULL) { _jc_post_exception(env, _JC_NullPointerException); _jc_throw_exception(env); } /* Convert String to UTF-8 */ len = _jc_decode_string_utf8(env, string, NULL); if ((filename = _JC_STACK_ALLOC(env, len + 1)) == NULL) { _jc_post_exception_info(env); _jc_throw_exception(env); } _jc_decode_string_utf8(env, string, filename); /* Get class loader */ if (clobj == NULL) loader = vm->boot.loader; else if ((loader = _jc_get_loader(env, clobj)) == NULL) _jc_throw_exception(env); /* Open native library */ if (_jc_load_native_library(env, loader, filename) != JNI_OK) { _jc_post_exception_info(env); _jc_throw_exception(env); } /* OK */ return 1; }