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

📄 natsharedlibloader.cc

📁 gcc的组建
💻 CC
字号:
// natSharedLibLoader.cc - Implementation of SharedLibHelper native methods./* Copyright (C) 2001, 2003, 2004, 2005  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 <execution.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){  cls->protectionDomain = curHelper->domain;  cls->loader = curLoader;  cls->engine = &_Jv_soleCompiledEngine;  curHelper->registerClass(cls->getName(), cls);}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  if (handler)    dlclose (handler);#endif}voidgnu::gcj::runtime::SharedLibHelper::ensureSupersLinked(jclass k){  _Jv_Linker::wait_for_state (k, JV_STATE_LOADING);}

⌨️ 快捷键说明

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