diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-07-09 02:06:13 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-07-09 02:06:13 +0000 |
commit | b35c6a429e072089dd6efe5137edf6faffb19093 (patch) | |
tree | dbea0f3ac5ff14fb8399d1a2b1f71cb4dd14b98a /ext | |
parent | a189f7f6c858836d7957ab2d003ee40dd049cc61 (diff) |
* 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
Diffstat (limited to 'ext')
-rw-r--r-- | ext/dl/win32/lib/win32/registry.rb | 21 | ||||
-rw-r--r-- | ext/fiddle/win32/lib/win32/registry.rb | 21 |
2 files changed, 26 insertions, 16 deletions
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) diff --git a/ext/fiddle/win32/lib/win32/registry.rb b/ext/fiddle/win32/lib/win32/registry.rb index 401a795df9..5fc9626e2d 100644 --- a/ext/fiddle/win32/lib/win32/registry.rb +++ b/ext/fiddle/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) |