From ba3da9af7d8db43d421426d506d3f0ab1a0f757e Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 23 Dec 2014 07:03:37 +0000 Subject: registry.rb: try en_US message * ext/win32/lib/win32/registry.rb (Win32::Registry::Error#initialize): try en_US message if the default message cannot be encoded to locale. [ruby-core:65295] [Bug #10300] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48927 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/win32/lib/win32/registry.rb | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'ext/win32/lib') diff --git a/ext/win32/lib/win32/registry.rb b/ext/win32/lib/win32/registry.rb index b14bd48fcf..8dcf139480 100644 --- a/ext/win32/lib/win32/registry.rb +++ b/ext/win32/lib/win32/registry.rb @@ -175,11 +175,19 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr def initialize(code) @code = code msg = WCHAR_NUL * 1024 - len = FormatMessageW.call(0x1200, 0, code, 0, msg, 1024, 0) - msg = msg.byteslice(0, len * WCHAR_SIZE) - msg.delete!(WCHAR_CR) - msg.chomp! - super msg.encode(LOCALE) + lang = 0 + begin + len = FormatMessageW.call(0x1200, 0, code, lang, msg, 1024, 0) + msg = msg.byteslice(0, len * WCHAR_SIZE) + msg.delete!(WCHAR_CR) + msg.chomp! + msg.encode!(LOCALE) + rescue EncodingError + raise unless lang == 0 + lang = 0x0409 # en_US + retry + end + super msg end attr_reader :code end -- cgit v1.2.3