Patch SharedLibLoader new exception and library path termination

Steve Pribyl steve@netfuel.com
Mon Jul 7 20:56:00 GMT 2003


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



More information about the Java-patches mailing list