extern "C" jboolean JVM_IterateJarEntries(const JvmPathChar* jar_file_name, JvmNameFilterProc entry_filter_proc, JvmDoJarEntryProc do_jar_entry_proc, JvmAllocProc alloc_proc, JvmFreeProc free_proc, void* caller_data) { SETUP_ERROR_CHECKER_ARG; if (alloc_proc == NULL) { if (free_proc != NULL) { return KNI_FALSE; } else { alloc_proc = (JvmAllocProc)&OsMemory_allocate; free_proc = (JvmFreeProc)&OsMemory_free; } } if (free_proc == NULL) { return KNI_FALSE; } JarFile jf(alloc_proc, free_proc); jf.open(jar_file_name, false, false JVM_CHECK_0); if (!jf.is_open()) { return KNI_FALSE; } bool success = jf.filtered_do_entries(entry_filter_proc, do_jar_entry_proc, caller_data JVM_CHECK_0); return CAST_TO_JBOOLEAN(success); }
KNIEXPORT jboolean KNI_IsAssignableFrom(jclass classHandle1, jclass classHandle2) { // Create handle for the first class JavaClassObj::Raw first_mirror = kni_read_handle(classHandle1); GUARANTEE(first_mirror.not_null(), "null argument to KNI_IsInstanceOf"); JavaClass::Raw first_class = first_mirror().java_class(); // Create handle for the second class JavaClassObj::Raw second_mirror = kni_read_handle(classHandle2); GUARANTEE(second_mirror.not_null(), "null argument to KNI_IsInstanceOf"); JavaClass::Raw second_class = second_mirror().java_class(); // Do subtype check return CAST_TO_JBOOLEAN(first_class().is_subtype_of(&second_class)); }
KNIEXPORT jboolean KNI_IsInstanceOf(jobject objectHandle, jclass classHandle) { // Create handle for objectHandle Oop::Raw object = kni_read_handle(objectHandle); if (object.is_null()) { return KNI_TRUE; } JavaClass::Raw object_class = object.blueprint(); // Create handle for classHandle JavaClassObj::Raw mirror = kni_read_handle(classHandle); GUARANTEE(mirror.not_null(), "null argument to KNI_IsInstanceOf"); JavaClass::Raw other_class = mirror().java_class(); // Do subtype check return CAST_TO_JBOOLEAN(object_class().is_subtype_of(&other_class)); }
KNIEXPORT jboolean KNI_IsSameObject(jobject obj1, jobject obj2) { OopDesc* object1 = kni_read_handle(obj1); OopDesc* object2 = kni_read_handle(obj2); // Do identity check return CAST_TO_JBOOLEAN(object1 == object2); }