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

ruby-changes:23303

From: nobu <ko1@a...>
Date: Tue, 17 Apr 2012 13:11:27 +0900 (JST)
Subject: [ruby-changes:23303] nobu:r35354 (trunk): * dln.c (rb_w32_check_imported): skip ordinal entries. based on a

nobu	2012-04-17 13:11:17 +0900 (Tue, 17 Apr 2012)

  New Revision: 35354

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

  Log:
    * dln.c (rb_w32_check_imported): skip ordinal entries.  based on a
      patch by phasis68 (Heesob Park) at [ruby-core:44381].
      [ruby-core:44371][Bug #6303]

  Added directories:
    trunk/ext/-test-/win32/
    trunk/ext/-test-/win32/dln/
    trunk/test/-ext-/win32/
  Added files:
    trunk/ext/-test-/win32/dln/dlntest.c
    trunk/ext/-test-/win32/dln/extconf.rb
    trunk/ext/-test-/win32/dln/libdlntest.c
    trunk/ext/-test-/win32/dln/libdlntest.def
    trunk/test/-ext-/win32/test_dln.rb
  Modified files:
    trunk/ChangeLog
    trunk/dln.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 35353)
+++ ChangeLog	(revision 35354)
@@ -1,7 +1,8 @@
-Mon Apr 16 21:25:24 2012  Nobuyoshi Nakada  <nobu@r...>
+Tue Apr 17 13:11:14 2012  Nobuyoshi Nakada  <nobu@r...>
 
-	* dln.c (rb_w32_check_imported): skip ordinal entries.  patched by
-	  phasis68 (Heesob Park) at [ruby-core:44381].  [Bug #6303]
+	* dln.c (rb_w32_check_imported): skip ordinal entries.  based on a
+	  patch by phasis68 (Heesob Park) at [ruby-core:44381].
+	  [ruby-core:44371][Bug #6303]
 
 Mon Apr 16 18:22:14 2012  NARUSE, Yui  <naruse@r...>
 
Index: dln.c
===================================================================
--- dln.c	(revision 35353)
+++ dln.c	(revision 35354)
@@ -1214,7 +1214,7 @@
     while (desc->Name) {
 	PIMAGE_THUNK_DATA pint = (PIMAGE_THUNK_DATA)((char *)ext + desc->Characteristics);
 	PIMAGE_THUNK_DATA piat = (PIMAGE_THUNK_DATA)((char *)ext + desc->FirstThunk);
-	while (piat->u1.Function) {
+	for (; piat->u1.Function; piat++, pint++) {
 	    static const char prefix[] = "rb_";
 	    PIMAGE_IMPORT_BY_NAME pii;
 	    const char *name;
@@ -1226,8 +1226,6 @@
 		FARPROC addr = GetProcAddress(mine, name);
 		if (addr) return (FARPROC)piat->u1.Function == addr;
 	    }
-	    piat++;
-	    pint++;
 	}
 	desc++;
     }
Index: ext/-test-/win32/dln/libdlntest.def
===================================================================
--- ext/-test-/win32/dln/libdlntest.def	(revision 0)
+++ ext/-test-/win32/dln/libdlntest.def	(revision 35354)
@@ -0,0 +1,2 @@
+EXPORTS
+dlntest_ordinal @1 NONAME

Property changes on: ext/-test-/win32/dln/libdlntest.def
___________________________________________________________________
Added: svn:eol-style
   + LF

Index: ext/-test-/win32/dln/libdlntest.c
===================================================================
--- ext/-test-/win32/dln/libdlntest.c	(revision 0)
+++ ext/-test-/win32/dln/libdlntest.c	(revision 35354)
@@ -0,0 +1,4 @@
+extern __declspec(dllexport) void
+dlntest_ordinal(void)
+{
+}

Property changes on: ext/-test-/win32/dln/libdlntest.c
___________________________________________________________________
Added: svn:eol-style
   + LF

Index: ext/-test-/win32/dln/extconf.rb
===================================================================
--- ext/-test-/win32/dln/extconf.rb	(revision 0)
+++ ext/-test-/win32/dln/extconf.rb	(revision 35354)
@@ -0,0 +1,28 @@
+if /mswin|mingw/ =~ RUBY_PLATFORM
+  $objs = ["dlntest.o"]
+
+  target_prefix = "-test-/win32/"
+  create_makefile(target_prefix+"dln")
+  m = File.read("Makefile")
+  m.sub!(/^OBJS =.*/) {$&+" dlntest.#{$LIBEXT}"}
+  open("Makefile", "wb") do |mf|
+    mf.puts m, "\n"
+    sodir = $extout ? "$(RUBYARCHDIR)/" : ''
+    mf.print "#{sodir}$(DLLIB): dlntest.#{$LIBEXT}"
+    mf.puts
+    mf.puts "dlntest.#{$LIBEXT}: $(topdir)/dlntest.dll"
+    mf.puts
+    mf.puts depend_rules("$(topdir)/dlntest.dll: libdlntest.o libdlntest.def")
+    mf.puts "\t$(ECHO) linking shared-object $(@F)\n"
+    mf.print "\t-$(Q)$(RM) $@\n"
+    mf.print "\t-$(Q)$(MAKEDIRS) $(@D)\n" if $extout
+    link_so = LINK_SO.gsub(/^/, "\t$(Q) ")
+    link_so.sub!(/\$\(LOCAL_LIBS\)/, '')
+    link_so.gsub!(/-\$\(arch\)/, '')
+    link_so.gsub!(/:.so=/, ':.dll=')
+    link_so.sub!(/\$\(OBJS\)/, "libdlntest.#{$OBJEXT}")
+    link_so.sub!(/\$\(DEFFILE\)/, "$(srcdir)/libdlntest.def")
+    mf.puts link_so
+    mf.puts
+  end
+end

Property changes on: ext/-test-/win32/dln/extconf.rb
___________________________________________________________________
Added: svn:eol-style
   + LF

Index: ext/-test-/win32/dln/dlntest.c
===================================================================
--- ext/-test-/win32/dln/dlntest.c	(revision 0)
+++ ext/-test-/win32/dln/dlntest.c	(revision 35354)
@@ -0,0 +1,17 @@
+#include <ruby.h>
+
+extern __declspec(dllimport) void dlntest_ordinal(void);
+
+static VALUE
+dln_dlntest(VALUE self)
+{
+    dlntest_ordinal();
+    return self;
+}
+
+void
+Init_dln(void)
+{
+    VALUE m = rb_define_module_under(rb_define_module("Bug"), "Win32");
+    rb_define_module_function(m, "dlntest", dln_dlntest, 0);
+}

Property changes on: ext/-test-/win32/dln/dlntest.c
___________________________________________________________________
Added: svn:eol-style
   + LF

Index: test/-ext-/win32/test_dln.rb
===================================================================
--- test/-ext-/win32/test_dln.rb	(revision 0)
+++ test/-ext-/win32/test_dln.rb	(revision 35354)
@@ -0,0 +1,13 @@
+require 'test/unit'
+require_relative '../../ruby/envutil'
+
+module Bug
+  module Win32
+    class TestDln < Test::Unit::TestCase
+      def test_check_imported
+        bug = '[Bug #6303]'
+        assert_in_out_err(['-r-test-/win32/dln', '-eexit'], '', [], [], bug, timeout: 10)
+      end
+    end
+  end
+end

Property changes on: test/-ext-/win32/test_dln.rb
___________________________________________________________________
Added: svn:eol-style
   + LF


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

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