+++ /dev/null
-// natSharedLibLoader.cc - Implementation of FirstThread native methods.
-
-/* Copyright (C) 2001 Free Software Foundation
-
- This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
-
-#include <config.h>
-
-#include <gcj/cni.h>
-#include <gnu/gcj/runtime/SharedLibLoader.h>
-#include <java/io/IOException.h>
-#include <java/lang/UnsupportedOperationException.h>
-
-#ifdef HAVE_DLOPEN
-#include <dlfcn.h>
-
-/* Only used during dlopen, while having a lock on Class.class. */
-static gnu::gcj::runtime::SharedLibLoader* curLoader;
-
-typedef void (*ClassHookFunc) (jclass);
-
-static void
-::register_hook(jclass cls)
-{
- curLoader->registerClass(cls->getName(), cls);
-}
-
-struct SharedLibDummy
-{
- ClassHookFunc saved;
- SharedLibDummy()
- {
- saved = _Jv_RegisterClassHook;
- }
- ~SharedLibDummy()
- {
- _Jv_RegisterClassHook = saved;
- curLoader = NULL;
- }
-};
-#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$);
- SharedLibDummy dummy2;
- curLoader = this;
- _Jv_RegisterClassHook = ::register_hook;
- void *h = dlopen(lname, flags);
- 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
-}
-
-void
-gnu::gcj::runtime::SharedLibLoader::finalize()
-{
-#ifdef HAVE_DLOPEN
- dlclose (handler);
-#endif
-}