17     MEMORY_BASIC_INFORMATION m;
 
   18     memset(&m, 0, 
sizeof(m));
 
   19     if( !VirtualQuery(_errno, &m, 
sizeof(m)) ) 
return NULL;
 
   20     return m.AllocationBase;
 
   25 w32_dlclose(
void *
ptr)
 
   28     if( 
ptr == w32_coredll() ) 
return 0;
 
   30     if( FreeLibrary((HMODULE)
ptr) ) 
return 0;
 
   33 #define dlclose(ptr) w32_dlclose(ptr) 
   37 fiddle_handle_free(
void *
ptr)
 
   41         dlclose(fiddle_handle->
ptr);
 
   47 fiddle_handle_memsize(
const void *
ptr)
 
   54     {0, fiddle_handle_free, fiddle_handle_memsize,},
 
   65 rb_fiddle_handle_close(
VALUE self)
 
   70     if(fiddle_handle->
open) {
 
   71         int ret = dlclose(fiddle_handle->
ptr);
 
   72         fiddle_handle->
open = 0;
 
   76 #if defined(HAVE_DLERROR) 
   90 rb_fiddle_handle_s_allocate(
VALUE klass)
 
   96     fiddle_handle->
ptr  = 0;
 
   97     fiddle_handle->
open = 0;
 
  104 predefined_fiddle_handle(
void *handle)
 
  109     fiddle_handle->
ptr = handle;
 
  110     fiddle_handle->
open = 1;
 
  143         cflag = RTLD_LAZY | RTLD_GLOBAL;
 
  147         cflag = RTLD_LAZY | RTLD_GLOBAL;
 
  154         rb_bug(
"rb_fiddle_handle_new");
 
  159         HANDLE rb_libruby_handle(
void);
 
  160         ptr = rb_libruby_handle();
 
  169         ptr = dlopen(
"coredll.dll", cflag);
 
  177         ptr = dlopen(clib, cflag);
 
  178 #if defined(HAVE_DLERROR) 
  179     if( !
ptr && (
err = dlerror()) ){
 
  190         dlclose(fiddle_handle->
ptr);
 
  193     fiddle_handle->
open = 1;
 
  209 rb_fiddle_handle_enable_close(
VALUE self)
 
  224 rb_fiddle_handle_disable_close(
VALUE self)
 
  241 rb_fiddle_handle_close_enabled_p(
VALUE self)
 
  257 rb_fiddle_handle_to_i(
VALUE self)
 
  271 rb_fiddle_handle_to_ptr(
VALUE self)
 
  279 static VALUE fiddle_handle_sym(
void *handle, 
VALUE symbol);
 
  294     if( ! fiddle_handle->
open ){
 
  298     return fiddle_handle_sym(fiddle_handle->
ptr, 
sym);
 
  302 #define RTLD_NEXT NULL 
  305 #define RTLD_DEFAULT NULL 
  325 fiddle_handle_sym(
void *handle, 
VALUE symbol)
 
  327 #if defined(HAVE_DLERROR) 
  329 # define CHECK_DLERROR if ((err = dlerror()) != 0) { func = 0; } 
  331 # define CHECK_DLERROR 
  339     func = (void (*)())(
VALUE)dlsym(handle, 
name);
 
  341 #if defined(FUNC_STDCALL) 
  346 #if defined(__CYGWIN__) || defined(_WIN32) || defined(__MINGW32__) 
  349             strcpy(name_a, 
name);
 
  352             name_a[
len+1] = 
'\0';
 
  353             func = dlsym(handle, name_a);
 
  355             if( func ) 
goto found;
 
  363         for( i = 0; i < 256; i += 4 ){
 
  364             sprintf(name_n + 
len, 
"%d", i);
 
  365             func = dlsym(handle, name_n);
 
  369         if( func ) 
goto found;
 
  372         for( i = 0; i < 256; i += 4 ){
 
  373             sprintf(name_n + 
len, 
"%d", i);
 
  374             func = dlsym(handle, name_n);
 
  395 rb_fiddle_handle_file_name(
VALUE self)
 
  401 #if defined(HAVE_DLINFO) && defined(HAVE_CONST_RTLD_DI_LINKMAP) 
  403         struct link_map *lm = 
NULL;
 
  404         int res = dlinfo(fiddle_handle->
ptr, RTLD_DI_LINKMAP, &lm);
 
  405         if (res == 0 && lm != 
NULL) {
 
  409 #if defined(HAVE_DLERROR) 
  416 #elif defined(HAVE_GETMODULEFILENAME) 
  418         char filename[MAX_PATH];
 
  419         DWORD res = GetModuleFileName(fiddle_handle->
ptr, filename, MAX_PATH);