зеркало из https://github.com/github/ruby.git
* 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:
Родитель
6655667d73
Коммит
dad31f6e50
|
@ -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
|
||||
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@ruby-lang.org>
|
||||
|
||||
|
|
4
dln.c
4
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++;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
|||
extern __declspec(dllexport) void
|
||||
dlntest_ordinal(void)
|
||||
{
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
EXPORTS
|
||||
dlntest_ordinal @1 NONAME
|
|
@ -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
|
Загрузка…
Ссылка в новой задаче