* src/native/llni.h (LLNI_classinfo_wrap, LLNI_classinfo_unwrap): Added new
[cacao.git] / src / native / vm / java_lang_ClassLoader.c
index 0c22e7b81ce45d9c7e3ece8318c89da172533a4c..8bed0685538d01a44bd31dc8ab4f4ca84ff237cf 100644 (file)
@@ -39,6 +39,7 @@
 #include "vm/global.h"                          /* required by native headers */
 
 #include "native/jni.h"
+#include "native/llni.h"
 
 /* keep this order of the native includes */
 
  * Method:    defineClass
  * Signature: (Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class;
  */
-java_lang_Class *_Jv_java_lang_ClassLoader_defineClass(java_lang_ClassLoader *cl, java_lang_String *name, java_bytearray *data, s4 offset, s4 len, java_security_ProtectionDomain *pd)
+java_lang_Class *_Jv_java_lang_ClassLoader_defineClass(java_lang_ClassLoader *cl, java_lang_String *name, java_handle_bytearray_t *data, s4 offset, s4 len, java_security_ProtectionDomain *pd)
 {
-       java_objectheader *loader;
-       utf               *utfname;
-       classinfo         *c;
-       java_lang_Class   *o;
+       classloader     *loader;
+       utf             *utfname;
+       classinfo       *c;
+       java_lang_Class *o;
 
 #if defined(ENABLE_JVMTI)
        jint new_class_data_len = 0;
        unsigned char* new_class_data = NULL;
 #endif
 
-       loader = (java_objectheader *) cl;
+       loader = (classloader *) cl;
 
        /* check if data was passed */
 
@@ -96,7 +97,7 @@ java_lang_Class *_Jv_java_lang_ClassLoader_defineClass(java_lang_ClassLoader *cl
 
        /* check the indexes passed */
 
-       if ((offset < 0) || (len < 0) || ((offset + len) > data->header.size)) {
+       if ((offset < 0) || (len < 0) || ((offset + len) > LLNI_array_size(data))) {
                exceptions_throw_arrayindexoutofboundsexception();
                return NULL;
        }
@@ -104,7 +105,7 @@ java_lang_Class *_Jv_java_lang_ClassLoader_defineClass(java_lang_ClassLoader *cl
        if (name != NULL) {
                /* convert '.' to '/' in java string */
 
-               utfname = javastring_toutf((java_objectheader *) name, true);
+               utfname = javastring_toutf((java_handle_t *) name, true);
        } 
        else {
                utfname = NULL;
@@ -115,7 +116,7 @@ java_lang_Class *_Jv_java_lang_ClassLoader_defineClass(java_lang_ClassLoader *cl
 
        if (jvmti)
                jvmti_ClassFileLoadHook(utfname, len, (unsigned char *) data->data, 
-                                                               loader, (java_objectheader *) pd, 
+                                                               loader, (java_handle_t *) pd, 
                                                                &new_class_data_len, &new_class_data);
 #endif
 
@@ -135,12 +136,12 @@ java_lang_Class *_Jv_java_lang_ClassLoader_defineClass(java_lang_ClassLoader *cl
 
        /* for convenience */
 
-       o = (java_lang_Class *) c;
+       o = LLNI_classinfo_wrap(c);
 
 #if defined(WITH_CLASSPATH_GNU)
        /* set ProtectionDomain */
 
-       o->pd = pd;
+       LLNI_field_set_ref(o, pd, pd);
 #endif
 
        return o;