< prev index next >

src/java.base/share/native/libjava/ClassLoader.c

Print this page




 191         utfSource = getUTF(env, source, sourceBuf, sizeof(sourceBuf));
 192         if (utfSource == NULL) {
 193             JNU_ThrowOutOfMemoryError(env, NULL);
 194             goto free_utfName;
 195         }
 196     } else {
 197         utfSource = NULL;
 198     }
 199     result = JVM_DefineClassWithSource(env, utfName, loader, body, length, pd, utfSource);
 200 
 201     if (utfSource && utfSource != sourceBuf)
 202         free(utfSource);
 203 
 204  free_utfName:
 205     if (utfName && utfName != buf)
 206         free(utfName);
 207 
 208     return result;
 209 }
 210 




























































 211 /*
 212  * Returns NULL if class not found.
 213  */
 214 JNIEXPORT jclass JNICALL
 215 Java_java_lang_ClassLoader_findBootstrapClass(JNIEnv *env, jobject loader,
 216                                               jstring classname)
 217 {
 218     char *clname;
 219     jclass cls = 0;
 220     char buf[128];
 221 
 222     if (classname == NULL) {
 223         return 0;
 224     }
 225 
 226     clname = getUTF(env, classname, buf, sizeof(buf));
 227     if (clname == NULL) {
 228         JNU_ThrowOutOfMemoryError(env, NULL);
 229         return NULL;
 230     }




 191         utfSource = getUTF(env, source, sourceBuf, sizeof(sourceBuf));
 192         if (utfSource == NULL) {
 193             JNU_ThrowOutOfMemoryError(env, NULL);
 194             goto free_utfName;
 195         }
 196     } else {
 197         utfSource = NULL;
 198     }
 199     result = JVM_DefineClassWithSource(env, utfName, loader, body, length, pd, utfSource);
 200 
 201     if (utfSource && utfSource != sourceBuf)
 202         free(utfSource);
 203 
 204  free_utfName:
 205     if (utfName && utfName != buf)
 206         free(utfName);
 207 
 208     return result;
 209 }
 210 
 211 JNIEXPORT jclass JNICALL
 212 Java_java_lang_ClassLoader_defineClass0(JNIEnv *env,
 213                                         jclass cls,
 214                                         jobject loader,
 215                                         jclass lookup,
 216                                         jstring name,
 217                                         jbyteArray data,
 218                                         jint offset,
 219                                         jint length,
 220                                         jobject pd,
 221                                         jboolean initialize,
 222                                         jint flags,
 223                                         jobject classData)
 224 {
 225     jbyte *body;
 226     char *utfName;
 227     jclass result = 0;
 228     char buf[128];
 229 
 230     if (data == NULL) {
 231         JNU_ThrowNullPointerException(env, 0);
 232         return 0;
 233     }
 234 
 235     /* Work around 4153825. malloc crashes on Solaris when passed a
 236      * negative size.
 237      */
 238     if (length < 0) {
 239         JNU_ThrowArrayIndexOutOfBoundsException(env, 0);
 240         return 0;
 241     }
 242 
 243     body = (jbyte *)malloc(length);
 244     if (body == 0) {
 245         JNU_ThrowOutOfMemoryError(env, 0);
 246         return 0;
 247     }
 248 
 249     (*env)->GetByteArrayRegion(env, data, offset, length, body);
 250 
 251     if ((*env)->ExceptionOccurred(env))
 252         goto free_body;
 253 
 254     if (name != NULL) {
 255         utfName = getUTF(env, name, buf, sizeof(buf));
 256         if (utfName == NULL) {
 257             goto free_body;
 258         }
 259         fixClassname(utfName);
 260     } else {
 261         utfName = NULL;
 262     }
 263 
 264     return JVM_LookupDefineClass(env, lookup, utfName, loader, body, length, pd, initialize, flags, classData);
 265 
 266  free_body:
 267     free(body);
 268     return result;
 269 }
 270 
 271 /*
 272  * Returns NULL if class not found.
 273  */
 274 JNIEXPORT jclass JNICALL
 275 Java_java_lang_ClassLoader_findBootstrapClass(JNIEnv *env, jobject loader,
 276                                               jstring classname)
 277 {
 278     char *clname;
 279     jclass cls = 0;
 280     char buf[128];
 281 
 282     if (classname == NULL) {
 283         return 0;
 284     }
 285 
 286     clname = getUTF(env, classname, buf, sizeof(buf));
 287     if (clname == NULL) {
 288         JNU_ThrowOutOfMemoryError(env, NULL);
 289         return NULL;
 290     }


< prev index next >