]> gcc.gnu.org Git - gcc.git/commitdiff
Runtime.java (_load): Declare.
authorTom Tromey <tromey@cygnus.com>
Tue, 8 Feb 2000 00:26:58 +0000 (00:26 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Tue, 8 Feb 2000 00:26:58 +0000 (00:26 +0000)
* java/lang/Runtime.java (_load): Declare.
(load, loadLibrary): Wrote in terms of _load.
* java/lang/natRuntime.cc (load): Call JNI_OnLoad if it appears in
library.
(loadLibrary): Likewise.
Include <jni.h>.
(_load): New method.
(loadLibrary, load): Removed.

From-SVN: r31846

libjava/ChangeLog
libjava/java/lang/Runtime.java
libjava/java/lang/natRuntime.cc

index 471b81fd7017fba5bca3c1b4170d75d41fc6f128..7f4d8bfca75b7f3ad99167989297d7c2b50ef185 100644 (file)
@@ -1,5 +1,14 @@
 2000-02-07  Tom Tromey  <tromey@cygnus.com>
 
+       * java/lang/Runtime.java (_load): Declare.
+       (load, loadLibrary): Wrote in terms of _load.
+       * java/lang/natRuntime.cc (load): Call JNI_OnLoad if it appears in
+       library.
+       (loadLibrary): Likewise.
+       Include <jni.h>.
+       (_load): New method.
+       (loadLibrary, load): Removed.
+
        * jni.cc (ThrowableClass): New define.
        (_Jv_JNI_Throw): Check argument.
        (_Jv_JNI_ThrowNew): Likewise.
index dcd89e090903add12a742ff68de5d3a12f45652f..752733e2724673154b18b8c992969e2346204824 100644 (file)
@@ -23,8 +23,7 @@ import java.util.StringTokenizer;
 /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
  * "The Java Language Specification", ISBN 0-201-63451-1
  * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status:  All 1.1 methods exist.  exec(), load(), and loadLibrary()
- * are not fully implemented.
+ * Status:  All 1.1 methods exist.  exec() is not fully implemented.
  */
 
 public class Runtime
@@ -94,8 +93,17 @@ public class Runtime
       s.checkLink(lib);
   }
 
-  public native void load (String pathname);
-  public native void loadLibrary (String libname);
+  private native void _load (String pathname, boolean do_search);
+
+  public void load (String pathname)
+  {
+    _load (pathname, false);
+  }
+
+  public void loadLibrary (String libname)
+  {
+    _load (libname, true);
+  }
 
   // This is a helper function for the ClassLoader which can load
   // compiled libraries.  Returns true if library (which is just the
index dd8b0d01e8778e983c688c0079530679f30ced21..d391ff42d6ba2b37794fc7c01dfa454a180a68f9 100644 (file)
@@ -18,6 +18,8 @@ details.  */
 #include <java/lang/UnknownError.h>
 #include <java/lang/UnsatisfiedLinkError.h>
 
+#include <jni.h>
+
 #ifdef USE_LTDL
 #include <ltdl.h>
 
@@ -99,7 +101,7 @@ java::lang::Runtime::gc (void)
 }
 
 void
-java::lang::Runtime::load (jstring path)
+java::lang::Runtime::_load (jstring path, jboolean do_search)
 {
   JvSynchronize sync (this);
   checkLink (path);
@@ -110,39 +112,29 @@ java::lang::Runtime::load (jstring path)
   jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
   buf[total] = '\0';
   // FIXME: make sure path is absolute.
-  lt_dlhandle h = lt_dlopen (buf);
+  lt_dlhandle h = do_search ? lt_dlopenext (buf) : lt_dlopen (buf);
   if (h == NULL)
     {
       const char *msg = lt_dlerror ();
       _Jv_Throw (new UnsatisfiedLinkError (JvNewStringLatin1 (msg)));
     }
-#else
-  _Jv_Throw (new UnknownError
-            (JvNewStringLatin1 ("Runtime.load not implemented")));
-#endif /* USE_LTDL */
-}
 
-void
-java::lang::Runtime::loadLibrary (jstring lib)
-{
-  JvSynchronize sync (this);
-  checkLink (lib);
-  using namespace java::lang;
-#ifdef USE_LTDL
-  jint len = _Jv_GetStringUTFLength (lib);
-  char buf[len + 1];
-  jsize total = JvGetStringUTFRegion (lib, 0, lib->length(), buf);
-  buf[total] = '\0';
-  // FIXME: make sure path is absolute.
-  lt_dlhandle h = lt_dlopenext (buf);
-  if (h == NULL)
+  void *onload = lt_dlsym (h, "JNI_OnLoad");
+  if (onload != NULL)
     {
-      const char *msg = lt_dlerror ();
-      _Jv_Throw (new UnsatisfiedLinkError (JvNewStringLatin1 (msg)));
+      // FIXME: need invocation API to get JavaVM.
+      jint vers = ((jint (*) (...)) onload) (NULL, NULL);
+      if (vers != JNI_VERSION_1_1 && vers != JNI_VERSION_1_2)
+       {
+         // FIXME: unload the library.
+         _Jv_Throw (new UnsatisfiedLinkError (JvNewStringLatin1 ("unrecognized version from JNI_OnLoad")));
+       }
     }
 #else
   _Jv_Throw (new UnknownError
-            (JvNewStringLatin1 ("Runtime.loadLibrary not implemented")));
+            (JvNewStringLatin1 (do_search
+                                ? "Runtime.loadLibrary not implemented"
+                                : "Runtime.load not implemented")));
 #endif /* USE_LTDL */
 }
 
This page took 0.069831 seconds and 5 git commands to generate.