< prev index next >

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

Print this page
rev 58565 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: duke
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com


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




























































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




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


< prev index next >