Linux RPM file header(rpm.rfh):
Class: Archive, Status: Headers only, Last change: 29.09.2000 19:30:00

set byteorder rev
type

short num-(2)
ushort num+(2)
ulint num+(4)
lint num-(4)

TPkgType enum short (Bin=0,Src=1)

TArchNumType enum short (
  i386_986 = 1,
  alpha = 2,
  sparc = 3,
  mipseb = 4,
  ppc = 5,
  m68k = 6,
  sgi = 7,
  rs6000 = 8,
  usparc = 10,
  mipsel = 11,
  arm = 12
)

TOSNumType enum short (
  Linux  =1,
  Irix   =2,
  solaris=3,
  SunOS  =4,
//  AmigaOS=5,
  AIX    =5,
  hpux10 =6,
  osf1   =7,
  FreeBSD=8,
  SCO_SV=9,
  Irix64=10,
  NextStep=11,
  BSD_OS=12,
  machten=13,
  cygwin32_nt=14,
  cygwin32_95=15,
  UNIX_SV=16
)

TSignatureType enum short (
  RPMSIG_NONE =       0,  /* Do not change! */
  RPMSIG_BAD =        2,  /* Returned for unknown types */
/* The following types are no longer generated */
  RPMSIG_PGP262_1024= 1,  /* No longer generated */
  RPMSIG_MD5 =        3,
  RPMSIG_MD5_PGP =    4,

/* These are the new-style signatures.  They are Header structures.    */
/* Inside them we can put any number of any type of signature we like. */
  RPMSIG_HEADERSIG =  5  /* New Header style signature */
)

TRPMLead struc
  ulint magic
  byte major
  byte minor
  TPkgType type
  TArchNumType archnum
  array[66] of Char name
  TOSNumType osnum
  TSignatureType signature_type
  raw[16] reserved
ends

data
0 TRPMLead Lead

type
THeaderTagType enum lint (
  RPMTAG_NAME                   = 1000,
  RPMTAG_VERSION                = 1001,
  RPMTAG_RELEASE                = 1002,
  RPMTAG_EPOCH                  = 1003,
//  RPMTAG_SERIAL           RPMTAG_EPOCH    /* backward comaptibility */
  RPMTAG_SUMMARY                = 1004,
  RPMTAG_DESCRIPTION            = 1005,
  RPMTAG_BUILDTIME              = 1006,
  RPMTAG_BUILDHOST              = 1007,
  RPMTAG_INSTALLTIME            = 1008,
  RPMTAG_SIZE                   = 1009,
  RPMTAG_DISTRIBUTION           = 1010,
  RPMTAG_VENDOR                 = 1011,
  RPMTAG_GIF                    = 1012,
  RPMTAG_XPM                    = 1013,
  RPMTAG_LICENSE                = 1014,
//  RPMTAG_COPYRIGHT        RPMTAG_LICENSE  /* backward comaptibility */
  RPMTAG_PACKAGER               = 1015,
  RPMTAG_GROUP                  = 1016,
  RPMTAG_CHANGELOG              = 1017,/* internal */
  RPMTAG_SOURCE                 = 1018,
  RPMTAG_PATCH                  = 1019,
  RPMTAG_URL                    = 1020,
  RPMTAG_OS                     = 1021,
  RPMTAG_ARCH                   = 1022,
  RPMTAG_PREIN                  = 1023,
  RPMTAG_POSTIN                 = 1024,
  RPMTAG_PREUN                  = 1025,
  RPMTAG_POSTUN                 = 1026,
  RPMTAG_FILENAMES              = 1027,
  RPMTAG_FILESIZES              = 1028,
  RPMTAG_FILESTATES             = 1029,
  RPMTAG_FILEMODES              = 1030,
  RPMTAG_FILEUIDS               = 1031,/* internal */
  RPMTAG_FILEGIDS               = 1032,/* internal */
  RPMTAG_FILERDEVS              = 1033,
  RPMTAG_FILEMTIMES             = 1034,
  RPMTAG_FILEMD5S               = 1035,
  RPMTAG_FILELINKTOS            = 1036,
  RPMTAG_FILEFLAGS              = 1037,
  RPMTAG_ROOT                   = 1038,
  RPMTAG_FILEUSERNAME           = 1039,
  RPMTAG_FILEGROUPNAME          = 1040,
  RPMTAG_EXCLUDE                = 1041,/* internal - depricated */
  RPMTAG_EXCLUSIVE              = 1042,/* internal - depricated */
  RPMTAG_ICON                   = 1043,
  RPMTAG_SOURCERPM              = 1044,
  RPMTAG_FILEVERIFYFLAGS        = 1045,
  RPMTAG_ARCHIVESIZE            = 1046,
  RPMTAG_PROVIDES               = 1047,
  RPMTAG_REQUIREFLAGS           = 1048,
  RPMTAG_REQUIRENAME            = 1049,
  RPMTAG_REQUIREVERSION         = 1050,
  RPMTAG_NOSOURCE               = 1051,/* internal */
  RPMTAG_NOPATCH                = 1052,/* internal */
  RPMTAG_CONFLICTFLAGS          = 1053,
  RPMTAG_CONFLICTNAME           = 1054,
  RPMTAG_CONFLICTVERSION        = 1055,
  RPMTAG_DEFAULTPREFIX          = 1056,/* internal - deprecated */
  RPMTAG_BUILDROOT              = 1057,
  RPMTAG_INSTALLPREFIX          = 1058,/* internal - deprecated */
  RPMTAG_EXCLUDEARCH            = 1059,
  RPMTAG_EXCLUDEOS              = 1060,
  RPMTAG_EXCLUSIVEARCH          = 1061,
  RPMTAG_EXCLUSIVEOS            = 1062,
  RPMTAG_AUTOREQPROV            = 1063,/* internal */
  RPMTAG_RPMVERSION             = 1064,
  RPMTAG_TRIGGERSCRIPTS         = 1065,
  RPMTAG_TRIGGERNAME            = 1066,
  RPMTAG_TRIGGERVERSION         = 1067,
  RPMTAG_TRIGGERFLAGS           = 1068,
  RPMTAG_TRIGGERINDEX           = 1069,
  RPMTAG_VERIFYSCRIPT           = 1079,
  RPMTAG_CHANGELOGTIME          = 1080,
  RPMTAG_CHANGELOGNAME          = 1081,
  RPMTAG_CHANGELOGTEXT          = 1082,
  RPMTAG_BROKENMD5              = 1083,/* internal */
  RPMTAG_PREREQ                 = 1084,/* internal */
  RPMTAG_PREINPROG              = 1085,
  RPMTAG_POSTINPROG             = 1086,
  RPMTAG_PREUNPROG              = 1087,
  RPMTAG_POSTUNPROG             = 1088,
  RPMTAG_BUILDARCHS             = 1089,
  RPMTAG_OBSOLETES              = 1090,
  RPMTAG_VERIFYSCRIPTPROG       = 1091,
  RPMTAG_TRIGGERSCRIPTPROG      = 1092,
  RPMTAG_DOCDIR                 = 1093,/* internal */
  RPMTAG_COOKIE                 = 1094,
  RPMTAG_FILEDEVICES            = 1095,
  RPMTAG_FILEINODES             = 1096,
  RPMTAG_FILELANGS              = 1097,
  RPMTAG_PREFIXES               = 1098,
  RPMTAG_INSTPREFIXES           = 1099,
  RPMTAG_TRIGGERIN              = 1100,/* internal */
  RPMTAG_TRIGGERUN              = 1101,/* internal */
  RPMTAG_TRIGGERPOSTUN          = 1102,/* internal */
  RPMTAG_AUTOREQ                = 1103,/* internal */
  RPMTAG_AUTOPROV               = 1104,/* internal */
  RPMTAG_CAPABILITY             = 1105,

  RPMTAG_EXTERNAL_TAG           = 1000000
)

TSignTagType enum lint (
  RPMSIGTAG_SIZE=1000,
/* the md5 sum was broken *twice* on big endian machines */
  RPMSIGTAG_LEMD5_1=1001,
  RPMSIGTAG_PGP=1002,
  RPMSIGTAG_LEMD5_2=1003,
  RPMSIGTAG_MD5=1004
)

THdrValType enum lint (
   NULL          = 0,
   CHAR          = 1,
   INT8          = 2,
   INT16         = 3,
   INT32         = 4,
   INT64         = 5,
   STRING        = 6,
   BIN           = 7,
   STRING_ARRAY  = 8,
   RPM_I18NSTRING_TYPE = 9
)

ulint64 struc
  ulint Hi
  ulint Lo
ends

THdrData(Kind,Cnt) case THdrValType @:Kind of
  CHAR: array[@:Cnt] of Char
  INT8: array[@:Cnt] of Byte
  INT16: array[@:Cnt] of ushort
  INT32: array[@:Cnt] of ulint
  INT64: array[@:Cnt] of ulint64
  BIN: raw[@:Cnt]
  STRING, STRING_ARRAY, RPM_I18NSTRING_TYPE: array[@:Cnt] of pchar
endc

PHdrData(Base,Kind,Cnt) ^THdrData(@:Kind,@:Cnt) NIL- near=ulint,
  REF=@:Base+@;

TSHeaderNDXItem(Base) struc
  TSignTagType tag
  THdrValType type
  PHdrData(Base=@:Base,Kind=@.type) offset
  ulint count
ends:[@.offset:Cnt=@.count]:autoname=(@.tag)

TSHeader struc
  array[3] of byte Magic //8e ad e8
  byte ver
  ulint Rsrv
  lint Count
  ulint DataSz
  array[@.Count] of TSHeaderNDXItem(&@@+@@:Size) Index
ends

THeaderNDXItem(Base) struc
  THeaderTagType tag
  THdrValType type
  PHdrData(@:Base,@.type) offset
  ulint count
ends:[@.offset:Cnt=@.count]:autoname=(@.tag)

THeader struc
  array[3] of byte Magic //8e ad e8
  byte ver
  ulint Rsrv
  ulint Count
  ulint DataSz
  array[@.Count] of THeaderNDXItem(&@@+@@:Size) Index
ends

type
TRPMSignature case Lead.signature_type of
  RPMSIG_NONE: void
  RPMSIG_PGP262_1024: raw[256]
//  RPMSIG_BAD,RPMSIG_MD5,RPMSIG_MD5_PGP - can't appear
  RPMSIG_HEADERSIG: TSHeader
endc

data

Lead:Size TRPMSignature Sign
((&Sign+Sign:Size+(Sign.RPMSIG_HEADERSIG.DataSz exc 0)+7))and
  0xFFFFFFF8 THeader Header



Other specifications.


FlexT home page, Author`s home page.