⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 natsharedlibloader.cc

📁 gcc的JAVA模块的源代码
💻 CC
字号:
// natSharedLibLoader.cc - Implementation of SharedLibHelper native methods./* Copyright (C) 2001, 2003  Free Software Foundation   This file is part of libgcj.This software is copyrighted work licensed under the terms of theLibgcj License.  Please consult the file "LIBGCJ_LICENSE" fordetails.  */#include <config.h>#include <gcj/cni.h>#include <jvm.h>#include <gnu/gcj/runtime/SharedLibHelper.h>#include <java/io/IOException.h>#include <java/lang/UnsupportedOperationException.h>#include <java/lang/UnknownError.h>#ifdef HAVE_DLOPEN#include <dlfcn.h>/* Only used during dlopen, while having a lock on Class.class. */static java::lang::ClassLoader *curLoader;static gnu::gcj::runtime::SharedLibHelper *curHelper;typedef void (*ClassHookFunc) (jclass);typedef void (*CoreHookFunc) (_Jv_core_chain *);void_Jv_sharedlib_register_hook (jclass cls){  curHelper->registerClass(cls->getName(), cls);  cls->protectionDomain = curHelper->domain;  cls->loader = curLoader;}static voidcore_hook (_Jv_core_chain *chain){  chain->next = (_Jv_core_chain *) curHelper->core_chain;  curHelper->core_chain = (gnu::gcj::RawData *) chain;}struct SharedLibDummy{  ClassHookFunc saved;  CoreHookFunc saved_core;  SharedLibDummy()  {    saved = _Jv_RegisterClassHook;    saved_core = _Jv_RegisterCoreHook;  }  ~SharedLibDummy()  {    _Jv_RegisterClassHook = saved;    _Jv_RegisterCoreHook = saved_core;    curLoader = NULL;  }};#endifvoidgnu::gcj::runtime::SharedLibHelper::init(void){#ifdef HAVE_DLOPEN  char *lname = (char *) __builtin_alloca (JvGetStringUTFLength (baseName)					   + 1);  jsize total = JvGetStringUTFRegion (baseName, 0, baseName->length(), lname);  lname[total] = '\0';  if (flags==0)    flags = RTLD_GLOBAL | RTLD_LAZY;  JvSynchronize dummy1(&java::lang::Class::class$);  SharedLibDummy dummy2;  curLoader = loader;  curHelper = this;  _Jv_RegisterClassHook = _Jv_sharedlib_register_hook;  _Jv_RegisterCoreHook = core_hook;  void *h = dlopen(lname, flags);  if (h == NULL)    {      const char *msg = dlerror();      throw new java::lang::UnknownError(JvNewStringLatin1(msg));    }  handler = (gnu::gcj::RawData*) h;#else  const char *msg    = "shared library class loading is not supported on this platform";  throw new java::lang::UnsupportedOperationException(JvNewStringLatin1(msg));#endif}jbooleangnu::gcj::runtime::SharedLibHelper::hasResource (jstring name){#ifdef HAVE_DLOPEN  _Jv_core_chain *node = _Jv_FindCore ((_Jv_core_chain *) core_chain, name);  return node != NULL;#else  return false;#endif}gnu::gcj::Core *gnu::gcj::runtime::SharedLibHelper::findCore (jstring name){#ifdef HAVE_DLOPEN  extern gnu::gcj::Core *_Jv_create_core (_Jv_core_chain *node, jstring name);  ensureInit();  return _Jv_create_core ((_Jv_core_chain *) core_chain, name);#else  return NULL;#endif}voidgnu::gcj::runtime::SharedLibHelper::finalize(){  _Jv_FreeCoreChain ((_Jv_core_chain *) core_chain);#ifdef HAVE_DLOPEN  dlclose (handler);#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -