summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--dln.c4
-rw-r--r--ext/-test-/win32/dln/dlntest.c17
-rw-r--r--ext/-test-/win32/dln/extconf.rb29
-rw-r--r--ext/-test-/win32/dln/libdlntest.c4
-rw-r--r--ext/-test-/win32/dln/libdlntest.def2
-rw-r--r--test/-ext-/win32/test_dln.rb13
-rw-r--r--version.h6
8 files changed, 73 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index d36ebc5337..a4685b0851 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,8 @@
-Mon Apr 16 21:26:20 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Apr 17 14:27:22 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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]
Sun Apr 15 14:57:00 2012 Tanaka Akira <akr@fsij.org>
diff --git a/dln.c b/dln.c
index a6e4891ba5..44410f75e4 100644
--- a/dln.c
+++ b/dln.c
@@ -1214,7 +1214,7 @@ rb_w32_check_imported(HMODULE ext, HMODULE mine)
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 @@ rb_w32_check_imported(HMODULE ext, HMODULE mine)
FARPROC addr = GetProcAddress(mine, name);
if (addr) return (FARPROC)piat->u1.Function == addr;
}
- piat++;
- pint++;
}
desc++;
}
diff --git a/ext/-test-/win32/dln/dlntest.c b/ext/-test-/win32/dln/dlntest.c
new file mode 100644
index 0000000000..3e6037ac07
--- /dev/null
+++ b/ext/-test-/win32/dln/dlntest.c
@@ -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);
+}
diff --git a/ext/-test-/win32/dln/extconf.rb b/ext/-test-/win32/dln/extconf.rb
new file mode 100644
index 0000000000..f2ea8d55d8
--- /dev/null
+++ b/ext/-test-/win32/dln/extconf.rb
@@ -0,0 +1,29 @@
+if /mswin|mingw/ =~ RUBY_PLATFORM
+ $objs = ["dlntest.o"]
+ $cleanfiles << "$(topdir)/dlntest.dll"
+ config_string('cleanobjs') {|t| $cleanfiles.concat(t.gsub(/\$\*/, 'dlntest').split)}
+
+ create_makefile("-test-/win32/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
diff --git a/ext/-test-/win32/dln/libdlntest.c b/ext/-test-/win32/dln/libdlntest.c
new file mode 100644
index 0000000000..040ae8125d
--- /dev/null
+++ b/ext/-test-/win32/dln/libdlntest.c
@@ -0,0 +1,4 @@
+extern __declspec(dllexport) void
+dlntest_ordinal(void)
+{
+}
diff --git a/ext/-test-/win32/dln/libdlntest.def b/ext/-test-/win32/dln/libdlntest.def
new file mode 100644
index 0000000000..85bc9c7a55
--- /dev/null
+++ b/ext/-test-/win32/dln/libdlntest.def
@@ -0,0 +1,2 @@
+EXPORTS
+dlntest_ordinal @1 NONAME
diff --git a/test/-ext-/win32/test_dln.rb b/test/-ext-/win32/test_dln.rb
new file mode 100644
index 0000000000..7ab912af7f
--- /dev/null
+++ b/test/-ext-/win32/test_dln.rb
@@ -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
diff --git a/version.h b/version.h
index 1d11451014..45c3291f14 100644
--- a/version.h
+++ b/version.h
@@ -1,10 +1,10 @@
#define RUBY_VERSION "1.9.3"
-#define RUBY_PATCHLEVEL 185
+#define RUBY_PATCHLEVEL 186
-#define RUBY_RELEASE_DATE "2012-04-16"
+#define RUBY_RELEASE_DATE "2012-04-17"
#define RUBY_RELEASE_YEAR 2012
#define RUBY_RELEASE_MONTH 4
-#define RUBY_RELEASE_DAY 16
+#define RUBY_RELEASE_DAY 17
#include "ruby/version.h"