summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--ext/dl/win32/lib/win32/registry.rb21
-rw-r--r--ext/fiddle/win32/lib/win32/registry.rb21
3 files changed, 34 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index 78d43ea..49d3f1e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Tue Jul 9 11:04:35 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * 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.
+
Tue Jul 9 10:27:56 2013 NAKAMURA Usaku <usa@ruby-lang.org>
* ext/{dl,fiddle}/win32/lib/win32/registry.rb
diff --git a/ext/dl/win32/lib/win32/registry.rb b/ext/dl/win32/lib/win32/registry.rb
index d9ba551..5be711c 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 401a795..5fc9626 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)