mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 16:47:25 +08:00
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
@ -1,5 +1,13 @@
|
||||
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
|
||||
`t' won't be null.
|
||||
|
||||
|
@ -40,6 +40,10 @@ details. */
|
||||
#include <gcj/cni.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
|
||||
#include <java/net/InetAddress.h>
|
||||
#endif
|
||||
|
@ -22,6 +22,10 @@ details. */
|
||||
|
||||
#include <io.h>
|
||||
|
||||
// Prefix and suffix for shared libraries.
|
||||
#define _Jv_platform_solib_prefix ""
|
||||
#define _Jv_platform_solib_suffix ".dll"
|
||||
|
||||
#ifndef DISBALE_JAVA_NET
|
||||
|
||||
// these errors cannot occur on Win32
|
||||
|
@ -27,6 +27,8 @@ details. */
|
||||
#include <java/lang/StringBuffer.h>
|
||||
#include <java/lang/Process.h>
|
||||
#include <java/lang/ConcreteProcess.h>
|
||||
#include <java/lang/ClassLoader.h>
|
||||
#include <gnu/gcj/runtime/StackTrace.h>
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
@ -161,18 +163,56 @@ java::lang::Runtime::_load (jstring path, jboolean do_search)
|
||||
using namespace java::lang;
|
||||
#ifdef USE_LTDL
|
||||
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;
|
||||
#ifndef WIN32
|
||||
// On Unix boxes, prefix library name with `lib', for loadLibrary.
|
||||
if (do_search)
|
||||
{
|
||||
strcpy (buf, "lib");
|
||||
offset = 3;
|
||||
strcpy (buf, _Jv_platform_solib_prefix);
|
||||
offset = strlen (_Jv_platform_solib_prefix);
|
||||
}
|
||||
#endif
|
||||
jsize total = JvGetStringUTFRegion (path, 0, path->length(), &buf[offset]);
|
||||
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;
|
||||
// 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
|
||||
// during the dlopen().
|
||||
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)
|
||||
{
|
||||
@ -602,19 +642,9 @@ java::lang::Runtime::nativeGetLibname (jstring pathname, jstring libname)
|
||||
#endif
|
||||
}
|
||||
|
||||
// FIXME: use platform function here.
|
||||
#ifndef WIN32
|
||||
sb->append (JvNewStringLatin1 ("lib"));
|
||||
#endif
|
||||
|
||||
sb->append (JvNewStringLatin1 (_Jv_platform_solib_prefix));
|
||||
sb->append(libname);
|
||||
|
||||
// FIXME: use platform function here.
|
||||
#ifdef WIN32
|
||||
sb->append (JvNewStringLatin1 ("dll"));
|
||||
#else
|
||||
sb->append (JvNewStringLatin1 ("so"));
|
||||
#endif
|
||||
sb->append (JvNewStringLatin1 (_Jv_platform_solib_suffix));
|
||||
|
||||
return sb->toString();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user