summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-03-02 02:01:48 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-03-02 02:01:48 +0000
commit033bed37c84cdc3ca5906b24f12a38779605b9d0 (patch)
tree72abc033de81c810b9f1b0db6910f815c9ed7119
parent46e06b572bca7e7e483a26750c59d8f85de5a2f8 (diff)
* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22703 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-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);