diff options
author | Claire McQuin <claire@getchef.com> | 2015-09-04 10:09:34 -0700 |
---|---|---|
committer | Claire McQuin <claire@getchef.com> | 2015-09-04 10:09:34 -0700 |
commit | 33fa66713f26456992cfb6f7dff8ebbe2d9e2140 (patch) | |
tree | acf36e5c020d2b1211ffdced7abeb0153ee00332 /lib/chef/monkey_patches | |
parent | 886a3faa3d689957acbda4ee4c836140bfb98b1f (diff) | |
download | chef-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.rb | 31 |
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 |