- list_init(&unloadedclasses, OFFSET(classinfo, listnode));
- list_init(&unlinkedclasses, OFFSET(classinfo, listnode));
- list_init(&linkedclasses, OFFSET(classinfo, listnode));
-
- /* create utf-symbols for pointer comparison of frequently used strings */
- utf_innerclasses = utf_new_char("InnerClasses");
- utf_constantvalue = utf_new_char("ConstantValue");
- utf_code = utf_new_char("Code");
- utf_finalize = utf_new_char("finalize");
- utf_fidesc = utf_new_char("()V");
- utf_clinit = utf_new_char("<clinit>");
- utf_initsystemclass = utf_new_char("initializeSystemClass");
- utf_systemclass = utf_new_char("java/lang/System");
- utf_vmclassloader = utf_new_char("java/lang/VMClassLoader");
- utf_initialize = utf_new_char("initialize");
- utf_initializedesc = utf_new_char("(I)V");
-
- utf_vmclass = utf_new_char("java/lang/VMClass");
- utf_java_lang_Object= utf_new_char("java/lang/Object");
-
- /* create some important classes */
- /* These classes have to be created now because the classinfo
- * pointers are used in the loading code.
- */
- class_java_lang_Object = class_new(utf_new_char("java/lang/Object"));
- class_java_lang_String = class_new(utf_new_char("java/lang/String"));
- class_java_lang_Cloneable = class_new(utf_new_char("java/lang/Cloneable"));
- class_java_io_Serializable = class_new(utf_new_char("java/io/Serializable"));
-
- if (verbose) log_text("loader_init: java/lang/Object");
- /* load the classes which were created above */
- loader_load_sysclass(NULL, class_java_lang_Object->name);
-
- loader_inited = 1; /*JOWENN*/
-
- loader_load_sysclass(&class_java_lang_Throwable,
- utf_new_char("java/lang/Throwable"));
-
- if (verbose) log_text("loader_init: loader_load: java/lang/ClassCastException");
- loader_load_sysclass(&class_java_lang_ClassCastException,
- utf_new_char ("java/lang/ClassCastException"));
- loader_load_sysclass(&class_java_lang_NullPointerException,
- utf_new_char ("java/lang/NullPointerException"));
- loader_load_sysclass(&class_java_lang_ArrayIndexOutOfBoundsException,
- utf_new_char ("java/lang/ArrayIndexOutOfBoundsException"));
- loader_load_sysclass(&class_java_lang_NegativeArraySizeException,
- utf_new_char ("java/lang/NegativeArraySizeException"));
- loader_load_sysclass(&class_java_lang_OutOfMemoryError,
- utf_new_char ("java/lang/OutOfMemoryError"));
- loader_load_sysclass(&class_java_lang_ArrayStoreException,
- utf_new_char ("java/lang/ArrayStoreException"));
- loader_load_sysclass(&class_java_lang_ArithmeticException,
- utf_new_char ("java/lang/ArithmeticException"));
- loader_load_sysclass(&class_java_lang_ThreadDeath,
- utf_new_char ("java/lang/ThreadDeath"));
-
+#if defined(USE_THREADS) && defined(NATIVE_THREADS)
+ /* Initialize the monitor pointer for zip/jar file locking. */
+
+ for (cpi = classpath_entries; cpi != NULL; cpi = cpi->next) {
+ if (cpi->type == CLASSPATH_ARCHIVE)
+ initObjectLock(&cpi->header);
+ }
+#endif
+
+ /* Create some important classes. These classes have to be created now */
+ /* because the classinfo pointers are used in the loading code. */
+
+ if (!class_load(class_java_lang_Object) ||
+ !class_link(class_java_lang_Object))
+ return false;
+
+ if (!class_load(class_java_lang_String) ||
+ !class_link(class_java_lang_String))
+ return false;
+
+ if (!class_load(class_java_lang_Cloneable) ||
+ !class_link(class_java_lang_Cloneable))
+ return false;
+
+ if (!class_load(class_java_io_Serializable) ||
+ !class_link(class_java_io_Serializable))
+ return false;
+