summaryrefslogtreecommitdiff
path: root/lib/chef/monkey_patches
diff options
context:
space:
mode:
authorClaire McQuin <claire@getchef.com>2015-09-04 10:09:34 -0700
committerClaire McQuin <claire@getchef.com>2015-09-04 10:09:34 -0700
commit33fa66713f26456992cfb6f7dff8ebbe2d9e2140 (patch)
treeacf36e5c020d2b1211ffdced7abeb0153ee00332 /lib/chef/monkey_patches
parent886a3faa3d689957acbda4ee4c836140bfb98b1f (diff)
downloadchef-33fa66713f26456992cfb6f7dff8ebbe2d9e2140.tar.gz
Move Win32::Registry#write monkeypatch into win32/registry monkeypatch file.
Diffstat (limited to 'lib/chef/monkey_patches')
-rw-r--r--lib/chef/monkey_patches/win32/registry.rb31
1 files changed, 28 insertions, 3 deletions
diff --git a/lib/chef/monkey_patches/win32/registry.rb b/lib/chef/monkey_patches/win32/registry.rb
index 5ebe67c45d..2ce2ac97f1 100644
--- a/lib/chef/monkey_patches/win32/registry.rb
+++ b/lib/chef/monkey_patches/win32/registry.rb
@@ -21,8 +21,9 @@ require 'win32/registry'
module Win32
class Registry
+
module API
-
+
extend Chef::ReservedNames::Win32::API::Registry
module_function
@@ -41,7 +42,31 @@ module Win32
def DeleteKey(hkey, name)
check RegDeleteKeyExW(hkey, name.to_wstring, 0, 0)
end
-
+
+ end
+
+ if RUBY_VERSION =~ /^2.1/
+ # ::Win32::Registry#write does not correctly handle data in Ruby 2.1 (up to Ruby 2.1.6).
+ # https://bugs.ruby-lang.org/issues/11439
+ def write(name, type, data)
+ case type
+ when REG_SZ, REG_EXPAND_SZ
+ data = data.to_s.encode(WCHAR) + WCHAR_NUL
+ when REG_MULTI_SZ
+ data = data.to_a.map {|s| s.encode(WCHAR)}.join(WCHAR_NUL) << WCHAR_NUL << WCHAR_NUL
+ when REG_BINARY
+ data = data.to_s
+ when REG_DWORD
+ data = API.packdw(data.to_i)
+ when REG_DWORD_BIG_ENDIAN
+ data = [data.to_i].pack('N')
+ when REG_QWORD
+ data = API.packqw(data.to_i)
+ else
+ raise TypeError, "Unsupported type #{type}"
+ end
+ API.SetValue(@hkey, name, type, data, data.bytesize)
+ end
end
end
-end \ No newline at end of file
+end