# 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