module RPM class Problem def self.release(ptr) RPM::C.rpmProblemFree(ptr) end # Creates a problem from an existing C pointer, refcounting it # first. # @param [FFI::Pointer] ptr existing C pointer # @return [RPM::Problem] wrapped object def self.from_ptr(ptr) case ptr when FFI::Pointer new(FFI::AutoPointer.new(RPM::C.rpmProblemLink(ptr), Problem.method(:release))) else raise "Can't initialize header with '#{ptr}'" end end # Create a problem item. # @param [RPM::ProblemType] type problem type # @param [String] pkg_nver name-version-edition-release of the related package # @param [String] key key of the related package # @param [String] alt_nver name-version-edition-release of the other related package # @param [String] str generic data string from a problem def self.create(type, pkg_nevr, key, alt_nevr, str, number) ptr = ::FFI::AutoPointer.new(RPM::C.rpmProblemCreate(type, pkg_nevr, key, alt_nevr, str, number), Problem.method(:release)) new(ptr) end # @visibility private def initialize(ptr) @ptr = ptr end # @return [RPM::ProblemType] type of problem (dependency, diskpace etc). def type RPM::C.rpmProblemGetType(@ptr) end # @return [String] filename or python object address of a problem. def key RPM::C.rpmProblemGetKey(@ptr).read_string end # @return [String] a generic data string from a problem. def str RPM::C.rpmProblemGetStr(@ptr) end # @return [String] formatted string representation of a problem def to_s RPM::C.rpmProblemString(@ptr) end # @return [Fixnum] compare two problems for equality. def <=>(other) RPM::C.rpmProblemCompare(@ptr, other.ptr) end # @visibility private attr_reader :ptr end end