BDJAVA* bdj_open(const char *path, struct bluray *bd, const char *bdj_disc_id, BDJ_STORAGE *storage) { BD_DEBUG(DBG_BDJ, "bdj_open()\n"); const char *jar_file = _find_libbluray_jar(storage); if (!jar_file) { BD_DEBUG(DBG_BDJ | DBG_CRIT, "BD-J start failed: " BDJ_JARFILE " not found.\n"); return NULL; } #if defined(__APPLE__) && !defined(HAVE_BDJ_J2ME) /* On macOS we need to load libjli to workaround a bug where the wrong * version would be used: https://bugs.openjdk.java.net/browse/JDK-7131356 */ void* jli_lib = _load_jli_macos(); if (!jli_lib) { BD_DEBUG(DBG_BDJ, "Wasn't able to load JLI\n"); } #endif // first load the jvm using dlopen const char *java_home = NULL; void* jvm_lib = _load_jvm(&java_home); if (!jvm_lib) { BD_DEBUG(DBG_BDJ | DBG_CRIT, "Wasn't able to load JVM\n"); return 0; } BDJAVA* bdjava = calloc(1, sizeof(BDJAVA)); if (!bdjava) { dl_dlclose(jvm_lib); return NULL; } JNIEnv* env = NULL; JavaVM *jvm = NULL; if (!_find_jvm(jvm_lib, &env, &jvm) && !_create_jvm(jvm_lib, java_home, jar_file, &env, &jvm)) { X_FREE(bdjava); dl_dlclose(jvm_lib); return NULL; } #if defined(__APPLE__) && !defined(HAVE_BDJ_J2ME) bdjava->h_libjli = jli_lib; #endif bdjava->h_libjvm = jvm_lib; bdjava->jvm = jvm; if (debug_mask & DBG_JNI) { int version = (int)(*env)->GetVersion(env); BD_DEBUG(DBG_BDJ, "Java version: %d.%d\n", version >> 16, version & 0xffff); }
BDJAVA* bdj_open(const char *path, struct bluray *bd, const char *bdj_disc_id, BDJ_STORAGE *storage) { BD_DEBUG(DBG_BDJ, "bdj_open()\n"); const char *jar_file = _find_libbluray_jar(storage); if (!jar_file) { BD_DEBUG(DBG_BDJ | DBG_CRIT, "BD-J start failed: " BDJ_JARFILE " not found.\n"); return NULL; } // first load the jvm using dlopen const char *java_home = NULL; void* jvm_lib = _load_jvm(&java_home); if (!jvm_lib) { BD_DEBUG(DBG_BDJ | DBG_CRIT, "Wasn't able to load JVM\n"); return 0; } JNIEnv* env = NULL; JavaVM *jvm = NULL; if (!_find_jvm(jvm_lib, &env, &jvm) && !_create_jvm(jvm_lib, java_home, jar_file, &env, &jvm)) { dl_dlclose(jvm_lib); return NULL; } BDJAVA* bdjava = calloc(1, sizeof(BDJAVA)); bdjava->h_libjvm = jvm_lib; bdjava->jvm = jvm; if (debug_mask & DBG_JNI) { int version = (int)(*env)->GetVersion(env); BD_DEBUG(DBG_BDJ, "Java version: %d.%d\n", version >> 16, version & 0xffff); }