win32.h (_Jv_platform_solib_prefix): New define.
* include/win32.h (_Jv_platform_solib_prefix): New define. (_Jv_platform_solib_suffix): Likewise. * include/posix.h (_Jv_platform_solib_prefix): New define. (_Jv_platform_solib_suffix): Likewise. * java/lang/natRuntime.cc: Include StackTrace.h. (_load): Use findLibrary and new platform defines. (nativeGetLibname): Use new platform defines. From-SVN: r59976
This commit is contained in:
parent
c53be425f7
commit
78bb0444d2
4 changed files with 65 additions and 19 deletions
|
@ -1,5 +1,13 @@
|
||||||
2002-12-09 Tom Tromey <tromey@redhat.com>
|
2002-12-09 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
* include/win32.h (_Jv_platform_solib_prefix): New define.
|
||||||
|
(_Jv_platform_solib_suffix): Likewise.
|
||||||
|
* include/posix.h (_Jv_platform_solib_prefix): New define.
|
||||||
|
(_Jv_platform_solib_suffix): Likewise.
|
||||||
|
* java/lang/natRuntime.cc: Include StackTrace.h.
|
||||||
|
(_load): Use findLibrary and new platform defines.
|
||||||
|
(nativeGetLibname): Use new platform defines.
|
||||||
|
|
||||||
* java/util/natResourceBundle.cc (getCallingClassLoader): Assume
|
* java/util/natResourceBundle.cc (getCallingClassLoader): Assume
|
||||||
`t' won't be null.
|
`t' won't be null.
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,10 @@ details. */
|
||||||
#include <gcj/cni.h>
|
#include <gcj/cni.h>
|
||||||
#include <java/util/Properties.h>
|
#include <java/util/Properties.h>
|
||||||
|
|
||||||
|
// Prefix and suffix for shared libraries.
|
||||||
|
#define _Jv_platform_solib_prefix "lib"
|
||||||
|
#define _Jv_platform_solib_suffix ".so"
|
||||||
|
|
||||||
#ifndef DISABLE_JAVA_NET
|
#ifndef DISABLE_JAVA_NET
|
||||||
#include <java/net/InetAddress.h>
|
#include <java/net/InetAddress.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -22,6 +22,10 @@ details. */
|
||||||
|
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
|
|
||||||
|
// Prefix and suffix for shared libraries.
|
||||||
|
#define _Jv_platform_solib_prefix ""
|
||||||
|
#define _Jv_platform_solib_suffix ".dll"
|
||||||
|
|
||||||
#ifndef DISBALE_JAVA_NET
|
#ifndef DISBALE_JAVA_NET
|
||||||
|
|
||||||
// these errors cannot occur on Win32
|
// these errors cannot occur on Win32
|
||||||
|
|
|
@ -27,6 +27,8 @@ details. */
|
||||||
#include <java/lang/StringBuffer.h>
|
#include <java/lang/StringBuffer.h>
|
||||||
#include <java/lang/Process.h>
|
#include <java/lang/Process.h>
|
||||||
#include <java/lang/ConcreteProcess.h>
|
#include <java/lang/ConcreteProcess.h>
|
||||||
|
#include <java/lang/ClassLoader.h>
|
||||||
|
#include <gnu/gcj/runtime/StackTrace.h>
|
||||||
|
|
||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
|
|
||||||
|
@ -161,18 +163,56 @@ java::lang::Runtime::_load (jstring path, jboolean do_search)
|
||||||
using namespace java::lang;
|
using namespace java::lang;
|
||||||
#ifdef USE_LTDL
|
#ifdef USE_LTDL
|
||||||
jint len = _Jv_GetStringUTFLength (path);
|
jint len = _Jv_GetStringUTFLength (path);
|
||||||
char buf[len + 1 + 3];
|
char buf[len + 1 + strlen (_Jv_platform_solib_prefix)
|
||||||
|
+ strlen (_Jv_platform_solib_suffix)];
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
#ifndef WIN32
|
|
||||||
// On Unix boxes, prefix library name with `lib', for loadLibrary.
|
|
||||||
if (do_search)
|
if (do_search)
|
||||||
{
|
{
|
||||||
strcpy (buf, "lib");
|
strcpy (buf, _Jv_platform_solib_prefix);
|
||||||
offset = 3;
|
offset = strlen (_Jv_platform_solib_prefix);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
jsize total = JvGetStringUTFRegion (path, 0, path->length(), &buf[offset]);
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), &buf[offset]);
|
||||||
buf[offset + total] = '\0';
|
buf[offset + total] = '\0';
|
||||||
|
|
||||||
|
char *lib_name = buf;
|
||||||
|
|
||||||
|
if (do_search)
|
||||||
|
{
|
||||||
|
ClassLoader *sys = ClassLoader::getSystemClassLoader();
|
||||||
|
ClassLoader *look = NULL;
|
||||||
|
gnu::gcj::runtime::StackTrace *t = new gnu::gcj::runtime::StackTrace(10);
|
||||||
|
for (int i = 0; i < 10; ++i)
|
||||||
|
{
|
||||||
|
jclass klass = t->classAt(i);
|
||||||
|
if (klass != NULL)
|
||||||
|
{
|
||||||
|
ClassLoader *loader = klass->getClassLoaderInternal();
|
||||||
|
if (loader != NULL && loader != sys)
|
||||||
|
{
|
||||||
|
look = loader;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (look != NULL)
|
||||||
|
{
|
||||||
|
// Don't include solib prefix in string passed to
|
||||||
|
// findLibrary.
|
||||||
|
jstring name = look->findLibrary(JvNewStringUTF(&buf[offset]));
|
||||||
|
if (name != NULL)
|
||||||
|
{
|
||||||
|
len = _Jv_GetStringUTFLength (name);
|
||||||
|
lib_name = (char *) _Jv_AllocBytes(len + 1);
|
||||||
|
total = JvGetStringUTFRegion (name, 0,
|
||||||
|
name->length(), lib_name);
|
||||||
|
lib_name[total] = '\0';
|
||||||
|
// Don't append suffixes any more; we have the full file
|
||||||
|
// name.
|
||||||
|
do_search = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lt_dlhandle h;
|
lt_dlhandle h;
|
||||||
// FIXME: make sure path is absolute.
|
// FIXME: make sure path is absolute.
|
||||||
{
|
{
|
||||||
|
@ -180,7 +220,7 @@ java::lang::Runtime::_load (jstring path, jboolean do_search)
|
||||||
// concurrent modification by class registration calls which may be run
|
// concurrent modification by class registration calls which may be run
|
||||||
// during the dlopen().
|
// during the dlopen().
|
||||||
JvSynchronize sync (&java::lang::Class::class$);
|
JvSynchronize sync (&java::lang::Class::class$);
|
||||||
h = do_search ? lt_dlopenext (buf) : lt_dlopen (buf);
|
h = do_search ? lt_dlopenext (lib_name) : lt_dlopen (lib_name);
|
||||||
}
|
}
|
||||||
if (h == NULL)
|
if (h == NULL)
|
||||||
{
|
{
|
||||||
|
@ -602,19 +642,9 @@ java::lang::Runtime::nativeGetLibname (jstring pathname, jstring libname)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: use platform function here.
|
sb->append (JvNewStringLatin1 (_Jv_platform_solib_prefix));
|
||||||
#ifndef WIN32
|
|
||||||
sb->append (JvNewStringLatin1 ("lib"));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
sb->append(libname);
|
sb->append(libname);
|
||||||
|
sb->append (JvNewStringLatin1 (_Jv_platform_solib_suffix));
|
||||||
// FIXME: use platform function here.
|
|
||||||
#ifdef WIN32
|
|
||||||
sb->append (JvNewStringLatin1 ("dll"));
|
|
||||||
#else
|
|
||||||
sb->append (JvNewStringLatin1 ("so"));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return sb->toString();
|
return sb->toString();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue