This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Patch SharedLibLoader new exception and library path termination
- From: Steve Pribyl <steve at netfuel dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Mon, 07 Jul 2003 15:55:59 -0500
- Subject: Patch SharedLibLoader new exception and library path termination
- Organization: Netfuel
Hey guy here is my first patch, If I mung up this submission please let
me know what I really need to do.
Thanks Steve
Did not null terminate library path name, causing library to not be found.
Added UnsatisfiedLinkError if dlopen returned null.
Index: libjava/gnu/gcj/runtime/SharedLibLoader.java
===================================================================
RCS file: /cvsroot/gcc/gcc/libjava/gnu/gcj/runtime/SharedLibLoader.java,v
retrieving revision 1.1
diff -c -3 -p -r1.1 SharedLibLoader.java
*** libjava/gnu/gcj/runtime/SharedLibLoader.java 29 Sep 2001
19:16:26 -0000 1.1
--- libjava/gnu/gcj/runtime/SharedLibLoader.java 7 Jul 2003
20:40:55 -0000
*************** public class SharedLibLoader extends Cla
*** 45,56 ****
init(libname, 0);
}
! void init(String libname, int flags)
! {
! init(libname.getBytes(), flags);
! }
!
! native void init(byte[] libname, int flags);
public Class loadClass(String name)
throws ClassNotFoundException
--- 45,51 ----
init(libname, 0);
}
! native void init(String libname, int flags);
public Class loadClass(String name)
throws ClassNotFoundException
Index: libjava/gnu/gcj/runtime/natSharedLibLoader.cc
===================================================================
RCS file: /cvsroot/gcc/gcc/libjava/gnu/gcj/runtime/natSharedLibLoader.cc,v
retrieving revision 1.2
diff -c -3 -p -r1.2 natSharedLibLoader.cc
*** libjava/gnu/gcj/runtime/natSharedLibLoader.cc 24 Oct 2001
07:00:19 -0000 1.2
--- libjava/gnu/gcj/runtime/natSharedLibLoader.cc 7 Jul 2003
20:40:55 -0000
*************** details. */
*** 14,19 ****
--- 14,20 ----
#include <gnu/gcj/runtime/SharedLibLoader.h>
#include <java/io/IOException.h>
#include <java/lang/UnsupportedOperationException.h>
+ #include <java/lang/UnsatisfiedLinkError.h>
#ifdef HAVE_DLOPEN
#include <dlfcn.h>
*************** struct SharedLibDummy
*** 45,54 ****
#endif
void
! gnu::gcj::runtime::SharedLibLoader::init(jbyteArray libname, jint flags)
{
#ifdef HAVE_DLOPEN
! char *lname = (char*) elements(libname);
if (flags==0)
flags = RTLD_LAZY;
JvSynchronize dummy1(&java::lang::Class::class$);
--- 46,59 ----
#endif
void
! gnu::gcj::runtime::SharedLibLoader::init(jstring libname, jint flags)
{
#ifdef HAVE_DLOPEN
! jint len = _Jv_GetStringUTFLength (libname);
! char lname[len + 1];
! JvGetStringUTFRegion (libname, 0, libname->length(), lname);
! lname[len] = '\0';
!
if (flags==0)
flags = RTLD_LAZY;
JvSynchronize dummy1(&java::lang::Class::class$);
*************** gnu::gcj::runtime::SharedLibLoader::init
*** 59,68 ****
if (h == NULL)
{
const char *msg = dlerror();
}
handler = (gnu::gcj::RawData*) h;
#else
! const char *msg = "ShareedLibLoader is not supported on this platform";
throw new
java::lang::UnsupportedOperationException(JvNewStringLatin1(msg));
#endif
}
--- 64,77 ----
if (h == NULL)
{
const char *msg = dlerror();
+ jstring str = JvNewStringLatin1 (lname);
+ str = str->concat (JvNewStringLatin1 (": "));
+ str = str->concat (JvNewStringLatin1 (msg));
+ throw new java::lang::UnsatisfiedLinkError (str);
}
handler = (gnu::gcj::RawData*) h;
#else
! const char *msg = "SharedLibLoader is not supported on this platform";
throw new
java::lang::UnsupportedOperationException(JvNewStringLatin1(msg));
#endif
}
--
Steve Pribyl
Steve AT NetFuel dot com
Computer Infrastructure Practitioner