Merged revisions 8245-8298 via svnmerge from
[cacao.git] / src / native / vm / java_lang_Runtime.c
index 27591bf31b76875fdff50176cefe412c3ba227da..4a363e368392965dc34c310086674e199ef910c6 100644 (file)
@@ -29,7 +29,7 @@
 
 #include "config.h"
 
-#if !defined(WITH_STATIC_CLASSPATH)
+#if defined(ENABLE_LTDL) && defined(HAVE_LTDL_H)
 # include <ltdl.h>
 #endif
 
@@ -105,48 +105,47 @@ void _Jv_java_lang_Runtime_gc(void)
 /*
  * Class:     java/lang/Runtime
  * Method:    loadLibrary
- * Signature: (Ljava/lang/String;)I
+ * Signature: (Ljava/lang/String;Ljava/lang/ClassLoader;)I
  */
-s4 _Jv_java_lang_Runtime_loadLibrary(java_lang_String *libname, java_objectheader *cl)
+#if defined(ENABLE_JNI)
+s4 _Jv_java_lang_Runtime_loadLibrary(JNIEnv *env, java_lang_String *libname, classloader *cl)
+#else
+s4 _Jv_java_lang_Runtime_loadLibrary(java_lang_String *libname, classloader *cl)
+#endif
 {
-#if !defined(WITH_STATIC_CLASSPATH)
+#if defined(ENABLE_LTDL)
        utf               *name;
        lt_dlhandle        handle;
+# if defined(ENABLE_JNI)
        lt_ptr             onload;
        s4                 version;
-#endif
+# endif
 
        if (libname == NULL) {
                exceptions_throw_nullpointerexception();
                return 0;
        }
 
-#if defined(WITH_STATIC_CLASSPATH)
-       return 1;
-#else /* defined(WITH_STATIC_CLASSPATH) */
-       name = javastring_toutf(libname, 0);
+       name = javastring_toutf((java_handle_t *) libname, false);
 
        /* is the library already loaded? */
 
-       if (native_hashtable_library_find(name, cl))
+       if (native_library_find(name, cl) != NULL)
                return 1;
 
-       /* try to open the library */
+       /* open the library */
 
-       if (!(handle = lt_dlopen(name->text))) {
-               if (opt_verbose) {
-                       log_start();
-                       log_print("_Jv_java_lang_Runtime_loadLibrary: ");
-                       log_print(lt_dlerror());
-                       log_finish();
-               }
+       handle = native_library_open(name);
 
+       if (handle == NULL)
                return 0;
-       }
 
+# if defined(ENABLE_JNI)
        /* resolve JNI_OnLoad function */
 
-       if ((onload = lt_dlsym(handle, "JNI_OnLoad"))) {
+       onload = lt_dlsym(handle, "JNI_OnLoad");
+
+       if (onload != NULL) {
                JNIEXPORT s4 (JNICALL *JNI_OnLoad) (JavaVM *, void *);
                JavaVM *vm;
 
@@ -164,13 +163,20 @@ s4 _Jv_java_lang_Runtime_loadLibrary(java_lang_String *libname, java_objectheade
                        return 0;
                }
        }
+# endif
 
        /* insert the library name into the library hash */
 
-       native_hashtable_library_add(name, cl, handle);
+       native_library_add(name, cl, handle);
 
        return 1;
-#endif /* defined(WITH_STATIC_CLASSPATH) */
+#else
+       vm_abort("_Jv_java_lang_Runtime_loadLibrary: not available");
+
+       /* keep compiler happy */
+
+       return 0;
+#endif
 }