aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--ext/dl/dl.h2
-rw-r--r--ext/dl/handle.c7
-rw-r--r--ruby.c6
4 files changed, 20 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 969666ce9b..2c9897e7a3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,9 @@
-Mon Mar 2 10:50:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Mar 2 11:01:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/dl.h (dlerror): fixed on Windows.
+
+ * ext/dl/handle.c (rb_dlhandle_initialize): returns handle to
+ libruby if nil is given on Windows as dlopen.
* ext/dl/handle.c (rb_dlhandle_sym): get rid of buffer overrun,
and try ASCII WINAPI versions too.
diff --git a/ext/dl/dl.h b/ext/dl/dl.h
index 753bd1c976..fb904bc561 100644
--- a/ext/dl/dl.h
+++ b/ext/dl/dl.h
@@ -24,7 +24,7 @@
# include <windows.h>
# define dlclose(ptr) FreeLibrary((HINSTANCE)ptr)
# define dlopen(name,flag) ((void*)LoadLibrary(name))
-# define dlerror() "unknown error"
+# define dlerror() strerror(rb_w32_map_errno(GetLastError()))
# define dlsym(handle,name) ((void*)GetProcAddress(handle,name))
# define RTLD_LAZY -1
# define RTLD_NOW -1
diff --git a/ext/dl/handle.c b/ext/dl/handle.c
index b8752004bc..c4ee0b9c14 100644
--- a/ext/dl/handle.c
+++ b/ext/dl/handle.c
@@ -67,6 +67,13 @@ rb_dlhandle_initialize(int argc, VALUE argv[], VALUE self)
rb_bug("rb_dlhandle_new");
}
+#if defined(HAVE_WINDOWS_H)
+ if( !clib ){
+ HANDLE rb_libruby_handle(void);
+ ptr = rb_libruby_handle();
+ }
+ else
+#endif
ptr = dlopen(clib, cflag);
#if defined(HAVE_DLERROR)
if( !ptr && (err = dlerror()) ){
diff --git a/ruby.c b/ruby.c
index ab15cd979a..b9a8ce27a5 100644
--- a/ruby.c
+++ b/ruby.c
@@ -325,6 +325,12 @@ DllMain(HINSTANCE dll, DWORD reason, LPVOID reserved)
libruby = dll;
return TRUE;
}
+
+HANDLE
+rb_libruby_handle(void)
+{
+ return libruby;
+}
#endif
void ruby_init_loadpath_safe(int safe_level);