class Chef::ReservedNames::Win32::Error
Public Class Methods
format_message(message_id = 0, args = {})
click to toggle source
# 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
get_last_error()
click to toggle source
# File lib/chef/win32/error.rb, line 49 def self.get_last_error FFI::LastError.error end
raise!(message = nil)
click to toggle source
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)
Returns¶ ↑
- nil:
-
always returns nil when it does not raise
Raises¶ ↑
- 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