jdk/src/java.base/share/native/libjava/Module.c
changeset 44359 c6761862ca0b
parent 43532 5028c6b02af5
child 44545 83b611b88ac8
equal deleted inserted replaced
44210:5a8499c4b32c 44359:c6761862ca0b
    71 Java_java_lang_reflect_Module_defineModule0(JNIEnv *env, jclass cls, jobject module,
    71 Java_java_lang_reflect_Module_defineModule0(JNIEnv *env, jclass cls, jobject module,
    72                                             jboolean is_open, jstring version,
    72                                             jboolean is_open, jstring version,
    73                                             jstring location, jobjectArray packages)
    73                                             jstring location, jobjectArray packages)
    74 {
    74 {
    75     char** pkgs = NULL;
    75     char** pkgs = NULL;
    76     jsize idx;
       
    77     jsize num_packages = (*env)->GetArrayLength(env, packages);
    76     jsize num_packages = (*env)->GetArrayLength(env, packages);
    78 
    77 
    79     if (num_packages != 0 && (pkgs = calloc(num_packages, sizeof(char*))) == NULL) {
    78     if (num_packages != 0 && (pkgs = calloc(num_packages, sizeof(char*))) == NULL) {
    80         JNU_ThrowOutOfMemoryError(env, NULL);
    79         JNU_ThrowOutOfMemoryError(env, NULL);
    81         return;
    80         return;
    82     } else {
    81     } else if ((*env)->EnsureLocalCapacity(env, (jint)num_packages) == 0) {
    83         int valid = 1;
    82         jboolean failed = JNI_FALSE;
       
    83         int idx;
    84         for (idx = 0; idx < num_packages; idx++) {
    84         for (idx = 0; idx < num_packages; idx++) {
    85             jstring pkg = (*env)->GetObjectArrayElement(env, packages, idx);
    85             jstring pkg = (*env)->GetObjectArrayElement(env, packages, idx);
    86             pkgs[idx] = GetInternalPackageName(env, pkg, NULL, 0);
    86             char* name = GetInternalPackageName(env, pkg, NULL, 0);
    87             if (pkgs[idx] == NULL) {
    87             if (name != NULL) {
    88                 valid = 0;
    88                 pkgs[idx] = name;
       
    89             } else {
       
    90                 failed = JNI_TRUE;
    89                 break;
    91                 break;
    90             }
    92             }
    91         }
    93         }
    92 
    94         if (!failed) {
    93         if (valid != 0) {
       
    94             JVM_DefineModule(env, module, is_open, version, location,
    95             JVM_DefineModule(env, module, is_open, version, location,
    95                     (const char* const*)pkgs, num_packages);
    96                              (const char* const*)pkgs, num_packages);
    96         }
    97         }
    97     }
    98     }
    98 
    99 
    99     if (num_packages > 0) {
   100     if (num_packages > 0) {
       
   101         int idx;
   100         for (idx = 0; idx < num_packages; idx++) {
   102         for (idx = 0; idx < num_packages; idx++) {
   101             if (pkgs[idx] != NULL) {
   103             if (pkgs[idx] != NULL) {
   102                 free(pkgs[idx]);
   104                 free(pkgs[idx]);
   103             }
   105             }
   104         }
   106         }