mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35354 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6655667d73
commit
dad31f6e50
7 changed files with 69 additions and 6 deletions
|
@ -1,7 +1,8 @@
|
||||||
Mon Apr 16 21:25:24 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Tue Apr 17 13:11:14 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* dln.c (rb_w32_check_imported): skip ordinal entries. patched by
|
* dln.c (rb_w32_check_imported): skip ordinal entries. based on a
|
||||||
phasis68 (Heesob Park) at [ruby-core:44381]. [Bug #6303]
|
patch by phasis68 (Heesob Park) at [ruby-core:44381].
|
||||||
|
[ruby-core:44371][Bug #6303]
|
||||||
|
|
||||||
Mon Apr 16 18:22:14 2012 NARUSE, Yui <naruse@ruby-lang.org>
|
Mon Apr 16 18:22:14 2012 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
|
|
4
dln.c
4
dln.c
|
@ -1214,7 +1214,7 @@ rb_w32_check_imported(HMODULE ext, HMODULE mine)
|
||||||
while (desc->Name) {
|
while (desc->Name) {
|
||||||
PIMAGE_THUNK_DATA pint = (PIMAGE_THUNK_DATA)((char *)ext + desc->Characteristics);
|
PIMAGE_THUNK_DATA pint = (PIMAGE_THUNK_DATA)((char *)ext + desc->Characteristics);
|
||||||
PIMAGE_THUNK_DATA piat = (PIMAGE_THUNK_DATA)((char *)ext + desc->FirstThunk);
|
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_";
|
static const char prefix[] = "rb_";
|
||||||
PIMAGE_IMPORT_BY_NAME pii;
|
PIMAGE_IMPORT_BY_NAME pii;
|
||||||
const char *name;
|
const char *name;
|
||||||
|
@ -1226,8 +1226,6 @@ rb_w32_check_imported(HMODULE ext, HMODULE mine)
|
||||||
FARPROC addr = GetProcAddress(mine, name);
|
FARPROC addr = GetProcAddress(mine, name);
|
||||||
if (addr) return (FARPROC)piat->u1.Function == addr;
|
if (addr) return (FARPROC)piat->u1.Function == addr;
|
||||||
}
|
}
|
||||||
piat++;
|
|
||||||
pint++;
|
|
||||||
}
|
}
|
||||||
desc++;
|
desc++;
|
||||||
}
|
}
|
||||||
|
|
17
ext/-test-/win32/dln/dlntest.c
Normal file
17
ext/-test-/win32/dln/dlntest.c
Normal file
|
@ -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);
|
||||||
|
}
|
28
ext/-test-/win32/dln/extconf.rb
Normal file
28
ext/-test-/win32/dln/extconf.rb
Normal file
|
@ -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
|
4
ext/-test-/win32/dln/libdlntest.c
Normal file
4
ext/-test-/win32/dln/libdlntest.c
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
extern __declspec(dllexport) void
|
||||||
|
dlntest_ordinal(void)
|
||||||
|
{
|
||||||
|
}
|
2
ext/-test-/win32/dln/libdlntest.def
Normal file
2
ext/-test-/win32/dln/libdlntest.def
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
EXPORTS
|
||||||
|
dlntest_ordinal @1 NONAME
|
13
test/-ext-/win32/test_dln.rb
Normal file
13
test/-ext-/win32/test_dln.rb
Normal file
|
@ -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
|
Loading…
Add table
Reference in a new issue