module RPM
  module C
    typedef :pointer, :header

    attach_function 'headerNew', [], :header
    attach_function 'headerFree', [:header], :header
    attach_function 'headerLink', [:header], :header
    # ..
    HEADERGET_DEFAULT   = [0,
                           HEADERGET_MINMEM = (1 << 0)].freeze
    HEADERGET_EXT       = (1 << 1)
    HEADERGET_RAW       = (1 << 2)
    HEADERGET_ALLOC     = (1 << 3)
    HEADERGET_ARGV      = (1 << 4)

    # ..
    attach_function 'headerGet', %i[header rpmTagVal pointer uint32], :int
    attach_function 'headerPut', %i[header pointer uint32], :int
    # ...
    attach_function 'headerFormat', %i[header string pointer], :pointer
    # ...
    # http://rpm.org/wiki/Releases/4.14.0 deprecated addMacro/delMacro
    unless rpm_version_code >= ((4 << 16) + (14 << 8) + (0 << 0))
      attach_function 'headerNVR', [:header, :pointer, :pointer, :pointer], :int
    end
    # ...
    attach_function 'headerGetAsString', %i[header rpmTagVal], :string
    # ...
    attach_function 'headerPutString', %i[header rpmTagVal string], :int
    # ...
    attach_function 'headerPutUint32', %i[header rpmTagVal pointer rpm_count_t], :int
    # ...
    attach_function 'rpmReadPackageFile', %i[header FD_t string pointer], Rc
  end
end