56 utf_str = buf; 57 } 58 (*env)->GetStringUTFRegion(env, pkg, 0, unicode_len, utf_str); 59 60 p = utf_str; 61 while (*p != '\0') { 62 if (*p == '.') { 63 *p = '/'; 64 } 65 p++; 66 } 67 return utf_str; 68 } 69 70 JNIEXPORT void JNICALL 71 Java_java_lang_reflect_Module_defineModule0(JNIEnv *env, jclass cls, jobject module, 72 jboolean is_open, jstring version, 73 jstring location, jobjectArray packages) 74 { 75 char** pkgs = NULL; 76 jsize idx; 77 jsize num_packages = (*env)->GetArrayLength(env, packages); 78 79 if (num_packages != 0 && (pkgs = calloc(num_packages, sizeof(char*))) == NULL) { 80 JNU_ThrowOutOfMemoryError(env, NULL); 81 return; 82 } else { 83 int valid = 1; 84 for (idx = 0; idx < num_packages; idx++) { 85 jstring pkg = (*env)->GetObjectArrayElement(env, packages, idx); 86 pkgs[idx] = GetInternalPackageName(env, pkg, NULL, 0); 87 if (pkgs[idx] == NULL) { 88 valid = 0; 89 break; 90 } 91 } 92 93 if (valid != 0) { 94 JVM_DefineModule(env, module, is_open, version, location, 95 (const char* const*)pkgs, num_packages); 96 } 97 } 98 99 if (num_packages > 0) { 100 for (idx = 0; idx < num_packages; idx++) { 101 if (pkgs[idx] != NULL) { 102 free(pkgs[idx]); 103 } 104 } 105 free(pkgs); 106 } 107 } 108 109 JNIEXPORT void JNICALL 110 Java_java_lang_reflect_Module_addReads0(JNIEnv *env, jclass cls, jobject from, jobject to) 111 { 112 JVM_AddReadsModule(env, from, to); 113 } 114 115 JNIEXPORT void JNICALL 116 Java_java_lang_reflect_Module_addExports0(JNIEnv *env, jclass cls, jobject from, 117 jstring pkg, jobject to) 118 { 119 char buf[128]; | 56 utf_str = buf; 57 } 58 (*env)->GetStringUTFRegion(env, pkg, 0, unicode_len, utf_str); 59 60 p = utf_str; 61 while (*p != '\0') { 62 if (*p == '.') { 63 *p = '/'; 64 } 65 p++; 66 } 67 return utf_str; 68 } 69 70 JNIEXPORT void JNICALL 71 Java_java_lang_reflect_Module_defineModule0(JNIEnv *env, jclass cls, jobject module, 72 jboolean is_open, jstring version, 73 jstring location, jobjectArray packages) 74 { 75 char** pkgs = NULL; 76 jsize num_packages = (*env)->GetArrayLength(env, packages); 77 78 if (num_packages != 0 && (pkgs = calloc(num_packages, sizeof(char*))) == NULL) { 79 JNU_ThrowOutOfMemoryError(env, NULL); 80 return; 81 } else if ((*env)->EnsureLocalCapacity(env, (jint)num_packages) == 0) { 82 jboolean failed = JNI_FALSE; 83 int idx; 84 for (idx = 0; idx < num_packages; idx++) { 85 jstring pkg = (*env)->GetObjectArrayElement(env, packages, idx); 86 char* name = GetInternalPackageName(env, pkg, NULL, 0); 87 if (name != NULL) { 88 pkgs[idx] = name; 89 } else { 90 failed = JNI_TRUE; 91 break; 92 } 93 } 94 if (!failed) { 95 JVM_DefineModule(env, module, is_open, version, location, 96 (const char* const*)pkgs, num_packages); 97 } 98 } 99 100 if (num_packages > 0) { 101 int idx; 102 for (idx = 0; idx < num_packages; idx++) { 103 if (pkgs[idx] != NULL) { 104 free(pkgs[idx]); 105 } 106 } 107 free(pkgs); 108 } 109 } 110 111 JNIEXPORT void JNICALL 112 Java_java_lang_reflect_Module_addReads0(JNIEnv *env, jclass cls, jobject from, jobject to) 113 { 114 JVM_AddReadsModule(env, from, to); 115 } 116 117 JNIEXPORT void JNICALL 118 Java_java_lang_reflect_Module_addExports0(JNIEnv *env, jclass cls, jobject from, 119 jstring pkg, jobject to) 120 { 121 char buf[128]; |