[前][次][番号順一覧][スレッド一覧]

ruby-changes:11366

From: nobu <ko1@a...>
Date: Tue, 17 Mar 2009 13:48:18 +0900 (JST)
Subject: [ruby-changes:11366] Ruby:r22986 (trunk): * win32/Makefile.sub (config.h): added RUBY_COREDLL.

nobu	2009-03-17 13:48:03 +0900 (Tue, 17 Mar 2009)

  New Revision: 22986

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22986

  Log:
    * win32/Makefile.sub (config.h): added RUBY_COREDLL.
    * ext/dl/handle.c (rb_dlhandle_initialize): returns msvcrt if libc
      or RUBY_COREDLL is given.  [ruby-core:22828]

  Modified files:
    trunk/ChangeLog
    trunk/ext/dl/dl.h
    trunk/ext/dl/handle.c
    trunk/win32/Makefile.sub

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22985)
+++ ChangeLog	(revision 22986)
@@ -1,3 +1,10 @@
+Tue Mar 17 13:48:08 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* win32/Makefile.sub (config.h): added RUBY_COREDLL.
+
+	* ext/dl/handle.c (rb_dlhandle_initialize): returns msvcrt if libc
+	  or RUBY_COREDLL is given.  [ruby-core:22828]
+
 Tue Mar 17 10:29:22 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* dir.c, dln.c, parse.y, re.c, ruby.c, sprintf.c, strftime.c,
Index: win32/Makefile.sub
===================================================================
--- win32/Makefile.sub	(revision 22985)
+++ win32/Makefile.sub	(revision 22986)
@@ -536,6 +536,7 @@
 #define RUBY_VENDOR_LIB RUBY_LIB_PREFIX"/vendor_ruby"
 #define RUBY_VENDOR_LIB2 RUBY_VENDOR_LIB"/"RUBY_LIB_VERSION
 #define RUBY_PLATFORM "$(arch)"
+#define RUBY_COREDLL "$(RT)"
 #define RUBY_ARCHLIB "/lib/$(RUBY_INSTALL_NAME)/$(ruby_version)/$(ARCH)-$(PLATFORM)"
 #define RUBY_SITE_ARCHLIB "/lib/$(RUBY_INSTALL_NAME)/site_ruby/$(ruby_version)/$(ARCH)-$(RT)"
 #define RUBY_VENDOR_ARCHLIB "/lib/$(RUBY_INSTALL_NAME)/vendor_ruby/$(ruby_version)/$(ARCH)-$(RT)"
Index: ext/dl/dl.h
===================================================================
--- ext/dl/dl.h	(revision 22985)
+++ ext/dl/dl.h	(revision 22986)
@@ -22,7 +22,6 @@
 #else
 # if defined(HAVE_WINDOWS_H)
 #   include <windows.h>
-#   define dlclose(ptr) FreeLibrary((HINSTANCE)ptr)
 #   define dlopen(name,flag) ((void*)LoadLibrary(name))
 #   define dlerror() strerror(rb_w32_map_errno(GetLastError()))
 #   define dlsym(handle,name) ((void*)GetProcAddress(handle,name))
Index: ext/dl/handle.c
===================================================================
--- ext/dl/handle.c	(revision 22985)
+++ ext/dl/handle.c	(revision 22986)
@@ -7,6 +7,30 @@
 
 VALUE rb_cDLHandle;
 
+#ifdef HAVE_WINDOWS_H
+# ifndef _WIN32_WCE
+static void *
+w32_coredll(void)
+{
+    MEMORY_BASIC_INFORMATION m;
+    memset(&m, 0, sizeof(m));
+    if( !VirtualQuery(_errno, &m, sizeof(m)) ) return NULL;
+    return m.AllocationBase;
+}
+# endif
+
+static int
+w32_dlclose(void *ptr)
+{
+# ifndef _WIN32_WCE
+    if( ptr == w32_coredll() ) return 0;
+# endif
+    if( FreeLibrary((HMODULE)ptr) ) return 0;
+    return errno = rb_w32_map_errno(GetLastError());
+}
+#define dlclose(ptr) w32_dlclose(ptr)
+#endif
+
 void
 dlhandle_free(struct dl_handle *dlhandle)
 {
@@ -72,6 +96,18 @@
 	HANDLE rb_libruby_handle(void);
 	ptr = rb_libruby_handle();
     }
+    else if( STRCASECMP(clib, "libc") == 0
+# ifdef RUBY_COREDLL
+	     || STRCASECMP(clib, RUBY_COREDLL) == 0
+	     || STRCASECMP(clib, RUBY_COREDLL".dll") == 0
+# endif
+	){
+# ifdef _WIN32_WCE
+	ptr = dlopen("coredll.dll", cflag);
+# else
+	ptr = w32_coredll();
+# endif
+    }
     else
 #endif
 	ptr = dlopen(clib, cflag);

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]