# File lib/chef/win32/error.rb, line 30 def self.format_message(message_id = 0, args = {}) flags = args[:flags] || FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY source = args[:source] language_id = args[:language_id] || 0 varargs = args[:varargs] || [:int, 0] buffer = FFI::MemoryPointer.new :pointer num_chars = FormatMessageW(flags | FORMAT_MESSAGE_ALLOCATE_BUFFER, source, message_id, language_id, buffer, 0, *varargs) if num_chars == 0 raise! end # Extract the string begin return buffer.read_pointer.read_wstring(num_chars) ensure Chef::ReservedNames::Win32::Memory.local_free(buffer.read_pointer) end end
# File lib/chef/win32/error.rb, line 49 def self.get_last_error GetLastError() end
Raises the last error. This should only be called by Win32 API wrapper functions, and then only when wrapped in an if() statement (since it unconditionally exits)
nil: |
always returns nil when it does not raise |
Chef::Exceptions::Win32APIError: |
# File lib/chef/win32/error.rb, line 60 def self.raise!(message = nil) code = get_last_error msg = format_message(code).strip formatted_message = "" formatted_message << message if message formatted_message << "---- Begin Win32 API output ----\n" formatted_message << "System Error Code: #{code}\n" formatted_message << "System Error Message: #{msg}\n" formatted_message << "---- End Win32 API output ----\n" raise Chef::Exceptions::Win32APIError, msg + "\n" + formatted_message end
Generated with the Darkfish Rdoc Generator 2.