diff --git a/ChangeLog b/ChangeLog index 9f30781f80..78d43ea7b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Tue Jul 9 10:27:56 2013 NAKAMURA Usaku + + * ext/{dl,fiddle}/win32/lib/win32/registry.rb + (Win32::Registry.expand_environ): use suitable encoding for the + string. + + * ext/{dl,fiddle}/win32/lib/win32/registry.rb (Win32::Registry#read): + should return REG_SZ, REG_EXPAND_SZ and REG_MULTI_SZ values with + the expected encoding -- assumed as the same encoding of name. + Tue Jul 9 10:02:45 2013 NAKAMURA Usaku * 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 abe9e36f9b..472f8228b3 100644 --- a/ext/dl/win32/lib/win32/registry.rb +++ b/ext/dl/win32/lib/win32/registry.rb @@ -340,7 +340,7 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr # For detail, see expandEnvironmentStrings[http://msdn.microsoft.com/library/en-us/sysinfo/base/expandenvironmentstrings.asp] \Win32 \API. # def self.expand_environ(str) - str.gsub(Regexp.compile("%([^%]+)%".encode(str.encoding))) { ENV[$1] || ENV[$1.upcase] || $& } + str.gsub(Regexp.compile("%([^%]+)%".encode(str.encoding))) { (e = ENV[$1.encode(locale)], e.encode(str.encoding) if e) || (e = ENV[$1.encode(locale).upcase], e.encode(str.encoding) if e) || $& } end @@type2name = { } @@ -600,9 +600,9 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr end case type when REG_SZ, REG_EXPAND_SZ - [ type, data.chop ] + [ type, data.encode(name.encoding).rstrip ] when REG_MULTI_SZ - [ type, data.split(/\0/) ] + [ type, data.encode(name.encoding).split(/\0/) ] when REG_BINARY [ type, data ] when REG_DWORD diff --git a/ext/fiddle/win32/lib/win32/registry.rb b/ext/fiddle/win32/lib/win32/registry.rb index 1c881ee300..21ee6bb030 100644 --- a/ext/fiddle/win32/lib/win32/registry.rb +++ b/ext/fiddle/win32/lib/win32/registry.rb @@ -340,7 +340,7 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr # For detail, see expandEnvironmentStrings[http://msdn.microsoft.com/library/en-us/sysinfo/base/expandenvironmentstrings.asp] \Win32 \API. # def self.expand_environ(str) - str.gsub(Regexp.compile("%([^%]+)%".encode(str.encoding))) { ENV[$1] || ENV[$1.upcase] || $& } + str.gsub(Regexp.compile("%([^%]+)%".encode(str.encoding))) { (e = ENV[$1.encode(locale)], e.encode(str.encoding) if e) || (e = ENV[$1.encode(locale).upcase], e.encode(str.encoding) if e) || $& } end @@type2name = { } @@ -600,9 +600,9 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr end case type when REG_SZ, REG_EXPAND_SZ - [ type, data.chop ] + [ type, data.encode(name.encoding).rstrip ] when REG_MULTI_SZ - [ type, data.split(/\0/) ] + [ type, data.encode(name.encoding).split(/\0/) ] when REG_BINARY [ type, data ] when REG_DWORD