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)
41 dlclose(fiddle_handle->
ptr);
49 return ptr ?
sizeof(
struct dl_handle) : 0;
70 if(fiddle_handle->
open) {
71 int ret = dlclose(fiddle_handle->
ptr);
72 fiddle_handle->
open = 0;
76 #if defined(HAVE_DLERROR)
96 fiddle_handle->
ptr = 0;
97 fiddle_handle->
open = 0;
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");
161 HANDLE rb_libruby_handle(
void);
162 ptr = rb_libruby_handle();
171 ptr = dlopen(
"coredll.dll", cflag);
178 ptr = dlopen(clib, cflag);
179 #if defined(HAVE_DLERROR)
180 if( !ptr && (err = dlerror()) ){
191 dlclose(fiddle_handle->
ptr);
194 fiddle_handle->
open = 1;
281 if( ! fiddle_handle->
open ){
289 #define RTLD_NEXT NULL
292 #define RTLD_DEFAULT NULL
314 #if defined(HAVE_DLERROR)
316 # define CHECK_DLERROR if( err = dlerror() ){ func = 0; }
318 # define CHECK_DLERROR
326 func = (void (*)())(
VALUE)dlsym(handle, name);
328 #if defined(FUNC_STDCALL)
331 int len = (int)
strlen(name);
333 #if defined(__CYGWIN__) || defined(_WIN32) || defined(__MINGW32__)
335 char *name_a = (
char*)
xmalloc(len+2);
336 strcpy(name_a, name);
339 name_a[len+1] =
'\0';
340 func = dlsym(handle, name_a);
342 if(
func )
goto found;
346 name_n = (
char*)
xmalloc(len+6);
348 memcpy(name_n, name, len);
350 for( i = 0; i < 256; i += 4 ){
351 sprintf(name_n + len,
"%d", i);
352 func = dlsym(handle, name_n);
356 if(
func )
goto found;
359 for( i = 0; i < 256; i += 4 ){
360 sprintf(name_n + len,
"%d", i);
361 func = dlsym(handle, name_n);