# 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 FFI::LastError.error 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.