This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch SharedLibLoader new exception and library path termination


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]