15 MEMORY_BASIC_INFORMATION m;
16 memset(&m, 0,
sizeof(m));
17 if( !VirtualQuery(_errno, &m,
sizeof(m)) )
return NULL;
18 return m.AllocationBase;
23 w32_dlclose(
void *ptr)
26 if( ptr == w32_coredll() )
return 0;
28 if( FreeLibrary((HMODULE)ptr) )
return 0;
31 #define dlclose(ptr) w32_dlclose(ptr)
39 dlclose(dlhandle->
ptr);
47 return ptr ?
sizeof(
struct dl_handle) : 0;
68 int ret = dlclose(dlhandle->
ptr);
73 #if defined(HAVE_DLERROR)
106 dlhandle->
ptr = handle;
132 cflag = RTLD_LAZY | RTLD_GLOBAL;
136 cflag = RTLD_LAZY | RTLD_GLOBAL;
143 rb_bug(
"rb_dlhandle_new");
150 HANDLE rb_libruby_handle(
void);
151 ptr = rb_libruby_handle();
160 ptr = dlopen(
"coredll.dll", cflag);
167 ptr = dlopen(clib, cflag);
168 #if defined(HAVE_DLERROR)
169 if( !ptr && (err = dlerror()) ){
180 dlclose(dlhandle->
ptr);
270 if( ! dlhandle->
open ){
278 #define RTLD_NEXT NULL
281 #define RTLD_DEFAULT NULL
302 #if defined(HAVE_DLERROR)
304 # define CHECK_DLERROR if( err = dlerror() ){ func = 0; }
306 # define CHECK_DLERROR
314 func = (void (*)())(
VALUE)dlsym(handle, name);
316 #if defined(FUNC_STDCALL)
319 int len = (int)
strlen(name);
321 #if defined(__CYGWIN__) || defined(_WIN32) || defined(__MINGW32__)
323 char *name_a = (
char*)
xmalloc(len+2);
324 strcpy(name_a, name);
327 name_a[len+1] =
'\0';
328 func = dlsym(handle, name_a);
330 if(
func )
goto found;
334 name_n = (
char*)
xmalloc(len+6);
336 memcpy(name_n, name, len);
338 for( i = 0; i < 256; i += 4 ){
339 sprintf(name_n + len,
"%d", i);
340 func = dlsym(handle, name_n);
344 if(
func )
goto found;
347 for( i = 0; i < 256; i += 4 ){
348 sprintf(name_n + len,
"%d", i);
349 func = dlsym(handle, name_n);