From b35c6a429e072089dd6efe5137edf6faffb19093 Mon Sep 17 00:00:00 2001 From: usa Date: Tue, 9 Jul 2013 02:06:13 +0000 Subject: * ext/{dl,fiddle}/win32/lib/win32/registry.rb (Win32::Regstry#check): should report the position of the error. * ext/{dl,fiddle}/win32/lib/win32/registry.rb (Win32::Regstry#QueryValue): workaround for test-all crash. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41849 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/dl/win32/lib/win32/registry.rb | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'ext/dl/win32/lib/win32/registry.rb') diff --git a/ext/dl/win32/lib/win32/registry.rb b/ext/dl/win32/lib/win32/registry.rb index d9ba5519f9..5be711c0e6 100644 --- a/ext/dl/win32/lib/win32/registry.rb +++ b/ext/dl/win32/lib/win32/registry.rb @@ -232,7 +232,7 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr module_function def check(result) - raise Error, result, caller(2) if result != 0 + raise Error, result, caller(1) if result != 0 end def packdw(dw) @@ -283,13 +283,18 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr end def QueryValue(hkey, name) - type = packdw(0) - size = packdw(0) - name = name.encode(WCHAR) - check RegQueryValueExW.call(hkey, name, 0, type, 0, size) - data = WCHAR_SPACE * unpackdw(size) - check RegQueryValueExW.call(hkey, name, 0, type, data, size) - [ unpackdw(type), data[0, unpackdw(size)].encode ] + prev_gc = GC.disable + begin + type = packdw(0) + size = packdw(0) + name = name.encode(WCHAR) + check RegQueryValueExW.call(hkey, name, 0, type, 0, size) + data = WCHAR_SPACE * unpackdw(size) + check RegQueryValueExW.call(hkey, name, 0, type, data, size) + [ unpackdw(type), data[0, unpackdw(size)].encode ] + ensure + GC.enable if prev_gc + end end def SetValue(hkey, name, type, data, size) -- cgit v1.2.3