Sha256: 36df802a82f5ac3e632a767a390d3625a802a42653a7a71b7477a50ae5ce0312

Contents?: true

Size: 890 Bytes

Versions: 7

Compression:

Stored size: 890 Bytes

Contents

require 'ffi'

class FFI::Pointer
  def read_array_of_null_separated_strings
    elements = []
    loc = self

    while element = loc.read_string
      break if element.nil? || element == ""
      elements << element
      loc += element.size + 1
    end

    elements
  end
end

module FFI
  extend FFI::Library

  ffi_lib :kernel32

  attach_function :FormatMessage, :FormatMessageA,
    [:ulong, :pointer, :ulong, :ulong, :pointer, :ulong, :pointer], :ulong

  def win_error(function, err=FFI.errno)
    flags = 0x00001000 | 0x00000200
    buf = FFI::MemoryPointer.new(:char, 1024)

    FormatMessage(flags, nil, err , 0x0409, buf, 1024, nil)

    function + ': ' + buf.read_string.strip
  end

  def raise_windows_error(function, err=FFI.errno)
    raise SystemCallError.new(win_error(function, err), err)
  end

  module_function :win_error
  module_function :raise_windows_error
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
win32-service-0.8.6 lib/win32/windows/helper.rb
win32-service-0.8.5 lib/win32/windows/helper.rb
win32-service-0.8.4 lib/win32/windows/helper.rb
win32-service-0.8.3 lib/win32/windows/helper.rb
win32-service-0.8.2 lib/win32/windows/helper.rb
win32-service-0.8.1 lib/win32/windows/helper.rb
win32-service-0.8.0 lib/win32/windows/helper.rb