aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>2000-02-08 00:26:58 +0000
committerTom Tromey <tromey@gcc.gnu.org>2000-02-08 00:26:58 +0000
commit3fd64b5a09de7b7128482bb764c9250b474ac78f (patch)
tree8f96de6d10a1be2f4df62afb63420832f7de519b /libjava
parent278abd2849d9546d8591ba88541a50b11d8337ec (diff)
downloadgcc-3fd64b5a09de7b7128482bb764c9250b474ac78f.zip
gcc-3fd64b5a09de7b7128482bb764c9250b474ac78f.tar.gz
gcc-3fd64b5a09de7b7128482bb764c9250b474ac78f.tar.bz2
Runtime.java (_load): Declare.
* 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
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog9
-rw-r--r--libjava/java/lang/Runtime.java16
-rw-r--r--libjava/java/lang/natRuntime.cc40
3 files changed, 37 insertions, 28 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 471b81f..7f4d8bf 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -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.
diff --git a/libjava/java/lang/Runtime.java b/libjava/java/lang/Runtime.java
index dcd89e0..752733e 100644
--- a/libjava/java/lang/Runtime.java
+++ b/libjava/java/lang/Runtime.java
@@ -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
diff --git a/libjava/java/lang/natRuntime.cc b/libjava/java/lang/natRuntime.cc
index dd8b0d0..d391ff4 100644
--- a/libjava/java/lang/natRuntime.cc
+++ b/libjava/java/lang/natRuntime.cc
@@ -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 */
}