# File lib/rpm/package.rb, line 328 def initialize_from_filename(filename) # it sucks not using the std File.open here hdr = ::FFI::MemoryPointer.new(:pointer) fd = nil begin fd = RPM::C.Fopen(filename, 'r') if RPM::C.Ferror(fd) != 0 raise "#{filename} : #{RPM::C.Fstrerror(fd)}" end RPM.transaction do |ts| rc = RPM::C.rpmReadPackageFile(ts.ptr, fd, filename, hdr) end ensure RPM::C.Fclose(fd) unless fd.nil? end initialize_from_header(hdr.get_pointer(0)) end