Parent

Class/Module Index [+]

Quicksearch

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
  GetLastError()
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

[Validate]

Generated with the Darkfish Rdoc Generator 2.