module Facter::Bsd::FfiHelper
Public Class Methods
sysctl(type, oids)
click to toggle source
# File lib/facter/resolvers/bsd/ffi/ffi_helper.rb, line 14 def self.sysctl(type, oids) name = FFI::MemoryPointer.new(:uint, oids.size) name.write_array_of_uint(oids) namelen = oids.size oldp = FFI::Pointer::NULL oldlenp = FFI::MemoryPointer.new(:size_t) newp = FFI::Pointer::NULL newlen = 0 if type == :string res = Libc.sysctl(name, namelen, oldp, oldlenp, newp, newlen) return nil if res.negative? else oldlenp.write(:size_t, FFI.type_size(type)) end oldp = FFI::MemoryPointer.new(:uint8_t, oldlenp.read(:size_t)) res = Libc.sysctl(name, namelen, oldp, oldlenp, newp, newlen) return nil if res.negative? case type when :string oldp.read_string else oldp.read(type) end end