HEADER.


Files

file  formats.c
file  package.c
file  rpmlib.h
 In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not.
file  hdrinline.h
file  header.c
file  header.h
 An rpm header carries all information about a package.
file  header_internal.c
file  header_internal.h

Data Structures

struct  headerToken_s
 The Header data structure. More...

Typedefs

typedef enum rpmTag_e rpmTag
typedef const char * errmsg_t
typedef int_32hTAG_t
typedef headerToken_sHeader
typedef headerIterator_sHeaderIterator
typedef headerTagTableEntry_sheaderTagTableEntry
 Associate tag names with numeric values.
typedef char *(*) headerTagFormatFunction (int_32 type, const void *data, char *formatPrefix, int padding, int element)
 HEADER_EXT_TAG format function prototype.
typedef int(*) headerTagTagFunction (Header h, hTYP_t type, hPTR_t *data, hCNT_t count, int *freeData)
 HEADER_EXT_FORMAT format function prototype.
typedef headerSprintfExtension_sheaderSprintfExtension
 Define header tag output formats.
typedef enum rpmTagType_e rpmTagType
 The basic types of data in tags from headers.
typedef enum rpmSubTagType_e rpmSubTagType
 New rpm data types under consideration/development.
typedef enum rpmTagReturnType_e rpmTagReturnType
 Identify how to return the header data type.
typedef Header(*) HDRnew (void)
 Create new (empty) header instance.
typedef Header(*) HDRfree (Header h)
 Dereference a header instance.
typedef Header(*) HDRlink (Header h)
 Reference a header instance.
typedef Header(*) HDRunlink (Header h)
 Dereference a header instance.
typedef void(*) HDRsort (Header h)
 Sort tags in header.
typedef void(*) HDRunsort (Header h)
 Restore tags in header to original ordering.
typedef unsigned int(*) HDRsizeof (Header h, enum hMagic magicp)
 Return size of on-disk header representation in bytes.
typedef void *(*) HDRunload (Header h)
 Convert header to on-disk representation.
typedef Header(*) HDRreload (Header h, int tag)
 Convert header to on-disk representation, and then reload.
typedef Header(*) HDRcopy (Header h)
 Duplicate a header.
typedef Header(*) HDRload (void *uh)
 Convert header to in-memory representation.
typedef Header(*) HDRcopyload (const void *uh)
 Make a copy and convert header to in-memory representation.
typedef Header(*) HDRread (FD_t fd, enum hMagic magicp)
 Read (and load) header from file handle.
typedef int(*) HDRwrite (FD_t fd, Header h, enum hMagic magicp)
 Write (with unload) header to file handle.
typedef int(*) HDRisentry (Header h, int_32 tag)
 Check if tag is in header.
typedef void *(*) HDRfreetag (Header h, const void *data, rpmTagType type)
 Free data allocated when retrieved from header.
typedef int(*) HDRget (Header h, int_32 tag, hTYP_t type, void **p, hCNT_t c)
 Retrieve tag value.
typedef int(*) HDRgetmin (Header h, int_32 tag, hTYP_t type, hPTR_t *p, hCNT_t c)
 Retrieve tag value using header internal array.
typedef int(*) HDRadd (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
 Add tag to header.
typedef int(*) HDRappend (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
 Append element to tag array in header.
typedef int(*) HDRaddorappend (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
 Add or append element to tag array in header.
typedef int(*) HDRaddi18n (Header h, int_32 tag, const char *string, const char *lang)
 Add locale specific tag to header.
typedef int(*) HDRmodify (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
 Modify tag in header.
typedef int(*) HDRremove (Header h, int_32 tag)
 Delete tag in header.
typedef char *(*) HDRsprintf (Header h, const char *fmt, const struct headerTagTableEntry_s *tags, const struct headerSprintfExtension_s *extensions, errmsg_t *errmsg)
 Return formatted output string from header tags.
typedef void(*) HDRcopytags (Header headerFrom, Header headerTo, hTAG_t tagstocopy)
 Duplicate tag values from one header into another.
typedef HeaderIterator(*) HDRfreeiter (HeaderIterator hi)
 Destroy header tag iterator.
typedef HeaderIterator(*) HDRinititer (Header h)
 Create header tag iterator.
typedef int(*) HDRnextiter (HeaderIterator hi, hTAG_t tag, hTYP_t type, hPTR_t *p, hCNT_t c)
 Return next tag from header.
typedef const char *(*) HDRgetorigin (Header h)
 Return header origin (e.g path or URL).
typedef int(*) HDRsetorigin (Header h, const char *origin)
 Store header origin (e.g path or URL).
typedef int(*) HDRgetinstance (Header h)
 Return header instance (if from rpmdb).
typedef int(*) HDRsetinstance (Header h, int instance)
 Store header instance (e.g path or URL).
typedef HV_sHV_t
 Header method vectors.
typedef entryInfo_sentryInfo
 Description of tag data.
typedef indexEntry_sindexEntry
 A single tag from a Header.
typedef sprintfTag_ssprintfTag
typedef rpmec_srpmec
 Extension cache.
typedef sprintfToken_ssprintfToken

Enumerations

enum  rpmTag_e {
  RPMTAG_HEADERIMAGE = HEADER_IMAGE, RPMTAG_HEADERSIGNATURES = HEADER_SIGNATURES, RPMTAG_HEADERIMMUTABLE = HEADER_IMMUTABLE, RPMTAG_HEADERREGIONS = HEADER_REGIONS,
  RPMTAG_HEADERI18NTABLE = HEADER_I18NTABLE, RPMTAG_SIG_BASE = HEADER_SIGBASE, RPMTAG_SIGSIZE = RPMTAG_SIG_BASE+1, RPMTAG_SIGLEMD5_1 = RPMTAG_SIG_BASE+2,
  RPMTAG_SIGPGP = RPMTAG_SIG_BASE+3, RPMTAG_SIGLEMD5_2 = RPMTAG_SIG_BASE+4, RPMTAG_SIGMD5 = RPMTAG_SIG_BASE+5, RPMTAG_SIGGPG = RPMTAG_SIG_BASE+6,
  RPMTAG_SIGPGP5 = RPMTAG_SIG_BASE+7, RPMTAG_BADSHA1_1 = RPMTAG_SIG_BASE+8, RPMTAG_BADSHA1_2 = RPMTAG_SIG_BASE+9, RPMTAG_PUBKEYS = RPMTAG_SIG_BASE+10,
  RPMTAG_DSAHEADER = RPMTAG_SIG_BASE+11, RPMTAG_RSAHEADER = RPMTAG_SIG_BASE+12, RPMTAG_SHA1HEADER = RPMTAG_SIG_BASE+13, RPMTAG_NAME = 1000,
  RPMTAG_VERSION = 1001, RPMTAG_RELEASE = 1002, RPMTAG_EPOCH = 1003, 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_PACKAGER = 1015, RPMTAG_GROUP = 1016,
  RPMTAG_CHANGELOG = 1017, 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_OLDFILENAMES = 1027, RPMTAG_FILESIZES = 1028,
  RPMTAG_FILESTATES = 1029, RPMTAG_FILEMODES = 1030, RPMTAG_FILEUIDS = 1031, RPMTAG_FILEGIDS = 1032,
  RPMTAG_FILERDEVS = 1033, RPMTAG_FILEMTIMES = 1034, RPMTAG_FILEDIGESTS = 1035, RPMTAG_FILELINKTOS = 1036,
  RPMTAG_FILEFLAGS = 1037, RPMTAG_ROOT = 1038, RPMTAG_FILEUSERNAME = 1039, RPMTAG_FILEGROUPNAME = 1040,
  RPMTAG_EXCLUDE = 1041, RPMTAG_EXCLUSIVE = 1042, RPMTAG_ICON = 1043, RPMTAG_SOURCERPM = 1044,
  RPMTAG_FILEVERIFYFLAGS = 1045, RPMTAG_ARCHIVESIZE = 1046, RPMTAG_PROVIDENAME = 1047, RPMTAG_REQUIREFLAGS = 1048,
  RPMTAG_REQUIRENAME = 1049, RPMTAG_REQUIREVERSION = 1050, RPMTAG_NOSOURCE = 1051, RPMTAG_NOPATCH = 1052,
  RPMTAG_CONFLICTFLAGS = 1053, RPMTAG_CONFLICTNAME = 1054, RPMTAG_CONFLICTVERSION = 1055, RPMTAG_DEFAULTPREFIX = 1056,
  RPMTAG_BUILDROOT = 1057, RPMTAG_INSTALLPREFIX = 1058, RPMTAG_EXCLUDEARCH = 1059, RPMTAG_EXCLUDEOS = 1060,
  RPMTAG_EXCLUSIVEARCH = 1061, RPMTAG_EXCLUSIVEOS = 1062, RPMTAG_AUTOREQPROV = 1063, 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, RPMTAG_PREREQ = 1084, RPMTAG_PREINPROG = 1085,
  RPMTAG_POSTINPROG = 1086, RPMTAG_PREUNPROG = 1087, RPMTAG_POSTUNPROG = 1088, RPMTAG_BUILDARCHS = 1089,
  RPMTAG_OBSOLETENAME = 1090, RPMTAG_VERIFYSCRIPTPROG = 1091, RPMTAG_TRIGGERSCRIPTPROG = 1092, RPMTAG_DOCDIR = 1093,
  RPMTAG_COOKIE = 1094, RPMTAG_FILEDEVICES = 1095, RPMTAG_FILEINODES = 1096, RPMTAG_FILELANGS = 1097,
  RPMTAG_PREFIXES = 1098, RPMTAG_INSTPREFIXES = 1099, RPMTAG_TRIGGERIN = 1100, RPMTAG_TRIGGERUN = 1101,
  RPMTAG_TRIGGERPOSTUN = 1102, RPMTAG_AUTOREQ = 1103, RPMTAG_AUTOPROV = 1104, RPMTAG_CAPABILITY = 1105,
  RPMTAG_SOURCEPACKAGE = 1106, RPMTAG_OLDORIGFILENAMES = 1107, RPMTAG_BUILDPREREQ = 1108, RPMTAG_BUILDREQUIRES = 1109,
  RPMTAG_BUILDCONFLICTS = 1110, RPMTAG_BUILDMACROS = 1111, RPMTAG_PROVIDEFLAGS = 1112, RPMTAG_PROVIDEVERSION = 1113,
  RPMTAG_OBSOLETEFLAGS = 1114, RPMTAG_OBSOLETEVERSION = 1115, RPMTAG_DIRINDEXES = 1116, RPMTAG_BASENAMES = 1117,
  RPMTAG_DIRNAMES = 1118, RPMTAG_ORIGDIRINDEXES = 1119, RPMTAG_ORIGBASENAMES = 1120, RPMTAG_ORIGDIRNAMES = 1121,
  RPMTAG_OPTFLAGS = 1122, RPMTAG_DISTURL = 1123, RPMTAG_PAYLOADFORMAT = 1124, RPMTAG_PAYLOADCOMPRESSOR = 1125,
  RPMTAG_PAYLOADFLAGS = 1126, RPMTAG_INSTALLCOLOR = 1127, RPMTAG_INSTALLTID = 1128, RPMTAG_REMOVETID = 1129,
  RPMTAG_SHA1RHN = 1130, RPMTAG_RHNPLATFORM = 1131, RPMTAG_PLATFORM = 1132, RPMTAG_PATCHESNAME = 1133,
  RPMTAG_PATCHESFLAGS = 1134, RPMTAG_PATCHESVERSION = 1135, RPMTAG_CACHECTIME = 1136, RPMTAG_CACHEPKGPATH = 1137,
  RPMTAG_CACHEPKGSIZE = 1138, RPMTAG_CACHEPKGMTIME = 1139, RPMTAG_FILECOLORS = 1140, RPMTAG_FILECLASS = 1141,
  RPMTAG_CLASSDICT = 1142, RPMTAG_FILEDEPENDSX = 1143, RPMTAG_FILEDEPENDSN = 1144, RPMTAG_DEPENDSDICT = 1145,
  RPMTAG_SOURCEPKGID = 1146, RPMTAG_FILECONTEXTS = 1147, RPMTAG_FSCONTEXTS = 1148, RPMTAG_RECONTEXTS = 1149,
  RPMTAG_POLICIES = 1150, RPMTAG_PRETRANS = 1151, RPMTAG_POSTTRANS = 1152, RPMTAG_PRETRANSPROG = 1153,
  RPMTAG_POSTTRANSPROG = 1154, RPMTAG_DISTTAG = 1155, RPMTAG_SUGGESTSNAME = 1156, RPMTAG_SUGGESTSVERSION = 1157,
  RPMTAG_SUGGESTSFLAGS = 1158, RPMTAG_ENHANCESNAME = 1159, RPMTAG_ENHANCESVERSION = 1160, RPMTAG_ENHANCESFLAGS = 1161,
  RPMTAG_PRIORITY = 1162, RPMTAG_CVSID = 1163, RPMTAG_BLINKPKGID = 1164, RPMTAG_BLINKHDRID = 1165,
  RPMTAG_BLINKNEVRA = 1166, RPMTAG_FLINKPKGID = 1167, RPMTAG_FLINKHDRID = 1168, RPMTAG_FLINKNEVRA = 1169,
  RPMTAG_PACKAGEORIGIN = 1170, RPMTAG_TRIGGERPREIN = 1171, RPMTAG_BUILDSUGGESTS = 1172, RPMTAG_BUILDENHANCES = 1173,
  RPMTAG_SCRIPTSTATES = 1174, RPMTAG_SCRIPTMETRICS = 1175, RPMTAG_BUILDCPUCLOCK = 1176, RPMTAG_FILEDIGESTALGOS = 1177,
  RPMTAG_VARIANTS = 1178, RPMTAG_XMAJOR = 1179, RPMTAG_XMINOR = 1180, RPMTAG_REPOTAG = 1181,
  RPMTAG_KEYWORDS = 1182, RPMTAG_BUILDPLATFORMS = 1183, RPMTAG_PACKAGECOLOR = 1184, RPMTAG_PACKAGEPREFCOLOR = 1185,
  RPMTAG_XATTRSDICT = 1186, RPMTAG_FILEXATTRSX = 1187, RPMTAG_DEPATTRSDICT = 1188, RPMTAG_CONFLICTATTRSX = 1189,
  RPMTAG_OBSOLETEATTRSX = 1190, RPMTAG_PROVIDEATTRSX = 1191, RPMTAG_REQUIREATTRSX = 1192, RPMTAG_BUILDPROVIDES = 1193,
  RPMTAG_BUILDOBSOLETES = 1194, RPMTAG_FIRSTFREE_TAG
}
enum  headerSprintfExtensionType { HEADER_EXT_LAST = 0, HEADER_EXT_FORMAT, HEADER_EXT_MORE, HEADER_EXT_TAG }
enum  hMagic { HEADER_MAGIC_NO = 0, HEADER_MAGIC_YES = 1 }
 Include calculation for 8 bytes of (magic, 0)? More...
enum  rpmTagType_e {
  RPM_NULL_TYPE = 0, RPM_CHAR_TYPE = 1, RPM_INT8_TYPE = 2, RPM_INT16_TYPE = 3,
  RPM_INT32_TYPE = 4, RPM_INT64_TYPE = 5, RPM_STRING_TYPE = 6, RPM_BIN_TYPE = 7,
  RPM_STRING_ARRAY_TYPE = 8, RPM_I18NSTRING_TYPE = 9, RPM_ASN1_TYPE = 10, RPM_OPENPGP_TYPE = 11,
  RPM_MASK_TYPE = 0x0000ffff
}
 The basic types of data in tags from headers. More...
enum  rpmSubTagType_e { RPM_REGION_TYPE = -10, RPM_BIN_ARRAY_TYPE = -11, RPM_XREF_TYPE = -12 }
 New rpm data types under consideration/development. More...
enum  rpmTagReturnType_e {
  RPM_ANY_RETURN_TYPE = 0, RPM_SCALAR_RETURN_TYPE = 0x00010000, RPM_ARRAY_RETURN_TYPE = 0x00020000, RPM_MAPPING_RETURN_TYPE = 0x00040000,
  RPM_MASK_RETURN_TYPE = 0xffff0000
}
 Identify how to return the header data type. More...

Functions

void headerMergeLegacySigs (Header h, const Header sigh)
 Translate and merge legacy signature tags into header.
Header headerRegenSigHeader (const Header h, int noArchiveSize)
 Regenerate signature header.
static HV_t h2hv (Header h)
static Header headerNew (void)
 Create new (empty) header instance.
static Header headerFree (Header h)
 Dereference a header instance.
static Header headerLink (Header h)
 Reference a header instance.
static Header headerUnlink (Header h)
 Dereference a header instance.
static void headerSort (Header h)
 Sort tags in header.
static void headerUnsort (Header h)
 Restore tags in header to original ordering.
static unsigned int headerSizeof (Header h, enum hMagic magicp)
 Return size of on-disk header representation in bytes.
static void * headerUnload (Header h)
 Convert header to on-disk representation.
static Header headerReload (Header h, int tag)
 Convert header to on-disk representation, and then reload.
static Header headerCopy (Header h)
 Duplicate a header.
static Header headerLoad (void *uh)
 Convert header to in-memory representation.
static Header headerCopyLoad (const void *uh)
 Make a copy and convert header to in-memory representation.
static Header headerRead (FD_t fd, enum hMagic magicp)
 Read (and load) header from file handle.
static int headerWrite (FD_t fd, Header h, enum hMagic magicp)
 Write (with unload) header to file handle.
static int headerIsEntry (Header h, int_32 tag)
 Check if tag is in header.
static void * headerFreeTag (Header h, const void *data, rpmTagType type)
 Free data allocated when retrieved from header.
static int headerGetEntry (Header h, int_32 tag, hTYP_t type, void **p, hCNT_t c)
 Retrieve tag value.
static int headerGetEntryMinMemory (Header h, int_32 tag, hTYP_t type, hPTR_t *p, hCNT_t c)
 Retrieve tag value using header internal array.
static int headerAddEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
 Add tag to header.
static int headerAppendEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
 Append element to tag array in header.
static int headerAddOrAppendEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
 Add or append element to tag array in header.
static int headerAddI18NString (Header h, int_32 tag, const char *string, const char *lang)
 Add locale specific tag to header.
static int headerModifyEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
 Modify tag in header.
static int headerRemoveEntry (Header h, int_32 tag)
 Delete tag in header.
static char * headerSprintf (Header h, const char *fmt, const struct headerTagTableEntry_s *tbltags, const struct headerSprintfExtension_s *extensions, errmsg_t *errmsg)
 Return formatted output string from header tags.
static void headerCopyTags (Header headerFrom, Header headerTo, hTAG_t tagstocopy)
 Duplicate tag values from one header into another.
static HeaderIterator headerFreeIterator (HeaderIterator hi)
 Destroy header tag iterator.
static HeaderIterator headerInitIterator (Header h)
 Create header tag iterator.
static int headerNextIterator (HeaderIterator hi, hTAG_t tag, hTYP_t type, hPTR_t *p, hCNT_t c)
 Return next tag from header.
static const char * headerGetOrigin (Header h)
 Return header origin (e.g path or URL).
static int headerSetOrigin (Header h, const char *origin)
 Store header origin (e.g path or URL).
static int headerGetInstance (Header h)
 Return header instance (if from rpmdb).
static int headerSetInstance (Header h, int instance)
 Store header instance (e.g path or URL).
static int regionSwab (indexEntry entry, int il, int dl, entryInfo pe, unsigned char *dataStart, const unsigned char *dataEnd, int regionid)
 Swap int_32 and int_16 arrays within header region.
static void * doHeaderUnload (Header h, int *lengthPtr)
 
Parameters:
h header

static int copyEntry (const indexEntry entry, hTYP_t type, hPTR_t *p, hCNT_t c, int minMem)
 Retrieve data from header entry.
static void * headerFreeData (const void *data, rpmTagType type)
 Free data allocated when retrieved from header.
int headerNVR (Header h, const char **np, const char **vp, const char **rp)
 Return name, version, release strings from header.
int headerNEVRA (Header h, const char **np, const char **ep, const char **vp, const char **rp, const char **ap)
 Return name, epoch, version, release, arch strings from header.
char ** headerGetLangs (Header h)
 Return array of locales found in header.
int headerGetRawEntry (Header h, int_32 tag, hTYP_t type, hPTR_t *p, hCNT_t c)
 Retrieve tag value with type match.
static int headerUsageCount (Header h)
 Return header reference count.
void headerDump (Header h, FILE *f, int flags, const struct headerTagTableEntry_s *tags)
 Dump a header in human readable format (for debugging).

Variables

HV_shdrVec
 Header methods for rpm headers.
static unsigned char header_magic [8]
static int typeAlign [16]
 Alignment needed for header data types.
static int typeSizes [16]
 Size of header data types.
static size_t headerMaxbytes = (32*1024*1024)
 Maximum no.
headerSprintfExtension_s headerDefaultFormats []
 Supported default header tag output formats.

Typedef Documentation

typedef struct entryInfo_s* entryInfo

Description of tag data.

Definition at line 25 of file header_internal.h.

typedef const char* errmsg_t

Definition at line 104 of file header.h.

typedef int(*) HDRadd(Header h, int_32 tag, int_32 type, const void *p, int_32 c)

Add tag to header.

Duplicate tags are okay, but only defined for iteration (with the exceptions noted below). While you are allowed to add i18n string arrays through this function, you probably don't mean to. See headerAddI18NString() instead.

Parameters:
h header
tag tag
type tag value data type
p pointer to tag value(s)
c number of values
Returns:
1 on success, 0 on failure

Definition at line 554 of file header.h.

typedef int(*) HDRaddi18n(Header h, int_32 tag, const char *string, const char *lang)

Add locale specific tag to header.

A NULL lang is interpreted as the C locale. Here are the rules:

 *	- If the tag isn't in the header, it's added with the passed string
 *	   as new value.
 *	- If the tag occurs multiple times in entry, which tag is affected
 *	   by the operation is undefined.
 *	- If the tag is in the header w/ this language, the entry is
 *	   *replaced* (like headerModifyEntry()).
 * 
This function is intended to just "do the right thing". If you need more fine grained control use headerAddEntry() and headerModifyEntry().

Parameters:
h header
tag tag
string tag value
lang locale
Returns:
1 on success, 0 on failure

Definition at line 610 of file header.h.

typedef int(*) HDRaddorappend(Header h, int_32 tag, int_32 type, const void *p, int_32 c)

Add or append element to tag array in header.

Todo:
Arg "p" should have const.
Parameters:
h header
tag tag
type tag value data type
p pointer to tag value(s)
c number of values
Returns:
1 on success, 0 on failure

Definition at line 586 of file header.h.

typedef int(*) HDRappend(Header h, int_32 tag, int_32 type, const void *p, int_32 c)

Append element to tag array in header.

Appends item p to entry w/ tag and type as passed. Won't work on RPM_STRING_TYPE. Any pointers into header memory returned from headerGetEntryMinMemory() for this entry are invalid after this call has been made!

Parameters:
h header
tag tag
type tag value data type
p pointer to tag value(s)
c number of values
Returns:
1 on success, 0 on failure

Definition at line 572 of file header.h.

typedef Header(*) HDRcopy(Header h)

Duplicate a header.

Parameters:
h header
Returns:
new header instance

Definition at line 435 of file header.h.

typedef Header(*) HDRcopyload(const void *uh)

Make a copy and convert header to in-memory representation.

Parameters:
uh on-disk header blob (i.e. with offsets)
Returns:
header

Definition at line 453 of file header.h.

typedef void(*) HDRcopytags(Header headerFrom, Header headerTo, hTAG_t tagstocopy)

Duplicate tag values from one header into another.

Parameters:
headerFrom source header
headerTo destination header
tagstocopy array of tags that are copied

Definition at line 666 of file header.h.

typedef Header(*) HDRfree(Header h)

Dereference a header instance.

Parameters:
h header
Returns:
NULL always

Definition at line 360 of file header.h.

typedef HeaderIterator(*) HDRfreeiter(HeaderIterator hi)

Destroy header tag iterator.

Parameters:
hi header tag iterator
Returns:
NULL always

Definition at line 675 of file header.h.

typedef void*(*) HDRfreetag(Header h,const void *data, rpmTagType type)

Free data allocated when retrieved from header.

Parameters:
h header
data address of data (or NULL)
type type of data (or -1 to force free)
Returns:
NULL always

Definition at line 496 of file header.h.

typedef int(*) HDRget(Header h, int_32 tag,hTYP_t type,void **p,hCNT_t c)

Retrieve tag value.

Will never return RPM_I18NSTRING_TYPE! RPM_STRING_TYPE elements with RPM_I18NSTRING_TYPE equivalent entries are translated (if HEADER_I18NTABLE entry is present).

Parameters:
h header
tag tag
Return values:
type address of tag value data type (or NULL)
p address of pointer to tag value(s) (or NULL)
c address of number of values (or NULL)
Returns:
1 on success, 0 on failure

Definition at line 514 of file header.h.

typedef int(*) HDRgetinstance(Header h)

Return header instance (if from rpmdb).

Parameters:
h header
Returns:
header instance

Definition at line 729 of file header.h.

typedef int(*) HDRgetmin(Header h, int_32 tag,hTYP_t type,hPTR_t *p,hCNT_t c)

Retrieve tag value using header internal array.

Get an entry using as little extra RAM as possible to return the tag value. This is only an issue for RPM_STRING_ARRAY_TYPE.

Parameters:
h header
tag tag
Return values:
type address of tag value data type (or NULL)
p address of pointer to tag value(s) (or NULL)
c address of number of values (or NULL)
Returns:
1 on success, 0 on failure

Definition at line 533 of file header.h.

typedef const char*(*) HDRgetorigin(Header h)

Return header origin (e.g path or URL).

Parameters:
h header
Returns:
header origin

Definition at line 710 of file header.h.

typedef HeaderIterator(*) HDRinititer(Header h)

Create header tag iterator.

Parameters:
h header
Returns:
header tag iterator

Definition at line 684 of file header.h.

typedef int(*) HDRisentry(Header h, int_32 tag)

Check if tag is in header.

Parameters:
h header
tag tag
Returns:
1 on success, 0 on failure

Definition at line 485 of file header.h.

typedef Header(*) HDRlink(Header h)

Reference a header instance.

Parameters:
h header
Returns:
referenced header instance

Definition at line 369 of file header.h.

typedef Header(*) HDRload(void *uh)

Convert header to in-memory representation.

Parameters:
uh on-disk header blob (i.e. with offsets)
Returns:
header

Definition at line 444 of file header.h.

typedef int(*) HDRmodify(Header h, int_32 tag, int_32 type, const void *p, int_32 c)

Modify tag in header.

If there are multiple entries with this tag, the first one gets replaced.

Parameters:
h header
tag tag
type tag value data type
p pointer to tag value(s)
c number of values
Returns:
1 on success, 0 on failure

Definition at line 625 of file header.h.

typedef Header(*) HDRnew(void)

Create new (empty) header instance.

Returns:
header

Definition at line 351 of file header.h.

typedef int(*) HDRnextiter(HeaderIterator hi,hTAG_t tag,hTYP_t type,hPTR_t *p,hCNT_t c)

Return next tag from header.

Parameters:
hi header tag iterator
Return values:
tag address of tag
type address of tag value data type
p address of pointer to tag value(s)
c address of number of values
Returns:
1 on success, 0 on failure

Definition at line 697 of file header.h.

typedef Header(*) HDRread(FD_t fd, enum hMagic magicp)

Read (and load) header from file handle.

Parameters:
fd file handle
magicp read (and verify) 8 bytes of (magic, 0)?
Returns:
header (or NULL on error)

Definition at line 463 of file header.h.

typedef Header(*) HDRreload(Header h, int tag)

Convert header to on-disk representation, and then reload.

This is used to insure that all header data is in one chunk.

Parameters:
h header (with pointers)
tag region tag
Returns:
on-disk header (with offsets)

Definition at line 426 of file header.h.

typedef int(*) HDRremove(Header h, int_32 tag)

Delete tag in header.

Removes all entries of type tag from the header, returns 1 if none were found.

Parameters:
h header
tag tag
Returns:
0 on success, 1 on failure (INCONSISTENT)

Definition at line 638 of file header.h.

typedef int(*) HDRsetinstance(Header h, int instance)

Store header instance (e.g path or URL).

Parameters:
h header
origin new header instance
Returns:
0 always

Definition at line 739 of file header.h.

typedef int(*) HDRsetorigin(Header h, const char *origin)

Store header origin (e.g path or URL).

Parameters:
h header
origin new header origin
Returns:
0 always

Definition at line 720 of file header.h.

typedef unsigned int(*) HDRsizeof(Header h, enum hMagic magicp)

Return size of on-disk header representation in bytes.

Parameters:
h header
magicp include size of 8 bytes for (magic, 0)?
Returns:
size of on-disk header

Definition at line 406 of file header.h.

typedef void(*) HDRsort(Header h)

Sort tags in header.

Todo:
Eliminate from API.
Parameters:
h header

Definition at line 387 of file header.h.

typedef char*(*) HDRsprintf(Header h, const char *fmt, const struct headerTagTableEntry_s *tags, const struct headerSprintfExtension_s *extensions,errmsg_t *errmsg)

Return formatted output string from header tags.

The returned string must be free()d.

Parameters:
h header
fmt format to use
tags array of tag name/value pairs
extensions chained table of formatting extensions.
Return values:
errmsg error message (if any)
Returns:
formatted output string (malloc'ed)

Definition at line 653 of file header.h.

typedef Header(*) HDRunlink(Header h)

Dereference a header instance.

Parameters:
h header
Returns:
NULL always

Definition at line 378 of file header.h.

typedef void*(*) HDRunload(Header h)

Convert header to on-disk representation.

Parameters:
h header (with pointers)
Returns:
on-disk header blob (i.e. with offsets)

Definition at line 415 of file header.h.

typedef void(*) HDRunsort(Header h)

Restore tags in header to original ordering.

Todo:
Eliminate from API.
Parameters:
h header

Definition at line 396 of file header.h.

typedef int(*) HDRwrite(FD_t fd,Header h, enum hMagic magicp)

Write (with unload) header to file handle.

Parameters:
fd file handle
h header
magicp prefix write with 8 bytes of (magic, 0)?
Returns:
0 on success, 1 on error

Definition at line 474 of file header.h.

typedef struct headerToken_s* Header

Definition at line 115 of file header.h.

typedef struct headerIterator_s* HeaderIterator

Definition at line 119 of file header.h.

typedef struct headerSprintfExtension_s* headerSprintfExtension

Define header tag output formats.

Definition at line 209 of file header.h.

typedef char*(*) headerTagFormatFunction(int_32 type, const void *data, char *formatPrefix, int padding, int element)

HEADER_EXT_TAG format function prototype.

This will only ever be passed RPM_INT32_TYPE or RPM_STRING_TYPE to help keep things simple.

Parameters:
type tag type
data tag value
formatPrefix 
padding 
element RPM_BIN_TYPE: no. bytes of data
Returns:
formatted string

Definition at line 182 of file header.h.

typedef struct headerTagTableEntry_s* headerTagTableEntry

Associate tag names with numeric values.

Definition at line 124 of file header.h.

typedef int(*) headerTagTagFunction(Header h,hTYP_t type,hPTR_t *data,hCNT_t count,int *freeData)

HEADER_EXT_FORMAT format function prototype.

This is allowed to fail, which indicates the tag doesn't exist.

Parameters:
h header
Return values:
*type tag type
*data tag value
*count no. of data items
*freedata data-was-malloc'ed indicator
Returns:
0 on success

Definition at line 198 of file header.h.

typedef int_32* hTAG_t

Definition at line 108 of file header.h.

typedef struct HV_s* HV_t

Header method vectors.

Definition at line 745 of file header.h.

typedef struct indexEntry_s* indexEntry

A single tag from a Header.

Definition at line 43 of file header_internal.h.

typedef struct rpmec_s* rpmec

Extension cache.

Definition at line 98 of file header_internal.h.

typedef enum rpmSubTagType_e rpmSubTagType

New rpm data types under consideration/development.

These data types may (or may not) be added to rpm at some point. In order to avoid incompatibility with legacy versions of rpm, these data (sub-)types are introduced into the header by overloading RPM_BIN_TYPE, with the binary value of the tag a 16 byte image of what should/will be in the header index, followed by per-tag private data.

typedef enum rpmTag_e rpmTag

Todo:
: Somehow supply type

typedef enum rpmTagReturnType_e rpmTagReturnType

Identify how to return the header data type.

typedef enum rpmTagType_e rpmTagType

The basic types of data in tags from headers.

typedef struct sprintfTag_s* sprintfTag

Definition at line 78 of file header_internal.h.

typedef struct sprintfToken_s* sprintfToken

Definition at line 110 of file header_internal.h.


Enumeration Type Documentation

enum headerSprintfExtensionType

Enumerator:
HEADER_EXT_LAST  End of extension chain.
HEADER_EXT_FORMAT  headerTagFormatFunction() extension
HEADER_EXT_MORE  Chain to next table.
HEADER_EXT_TAG  headerTagTagFunction() extension

Definition at line 163 of file header.h.

enum hMagic

Include calculation for 8 bytes of (magic, 0)?

Enumerator:
HEADER_MAGIC_NO 
HEADER_MAGIC_YES 

Definition at line 236 of file header.h.

enum rpmSubTagType_e

New rpm data types under consideration/development.

These data types may (or may not) be added to rpm at some point. In order to avoid incompatibility with legacy versions of rpm, these data (sub-)types are introduced into the header by overloading RPM_BIN_TYPE, with the binary value of the tag a 16 byte image of what should/will be in the header index, followed by per-tag private data.

Enumerator:
RPM_REGION_TYPE 
RPM_BIN_ARRAY_TYPE 
Todo:
Implement, kinda like RPM_STRING_ARRAY_TYPE for known (but variable) length binary data.
RPM_XREF_TYPE 
Todo:
Implement, intent is to to carry a (???,tagNum,valNum) cross reference to retrieve data from other tags.

Definition at line 271 of file header.h.

enum rpmTag_e

Todo:
: Somehow supply type
Enumerator:
RPMTAG_HEADERIMAGE  Current image.
RPMTAG_HEADERSIGNATURES  Signatures.
RPMTAG_HEADERIMMUTABLE  Original image.
RPMTAG_HEADERREGIONS  Regions.
RPMTAG_HEADERI18NTABLE  I18N string locales.
RPMTAG_SIG_BASE 
RPMTAG_SIGSIZE 
RPMTAG_SIGLEMD5_1 
RPMTAG_SIGPGP 
RPMTAG_SIGLEMD5_2 
RPMTAG_SIGMD5 
RPMTAG_SIGGPG 
RPMTAG_SIGPGP5 
RPMTAG_BADSHA1_1 
RPMTAG_BADSHA1_2 
RPMTAG_PUBKEYS 
RPMTAG_DSAHEADER 
RPMTAG_RSAHEADER 
RPMTAG_SHA1HEADER 
RPMTAG_NAME 
RPMTAG_VERSION 
RPMTAG_RELEASE 
RPMTAG_EPOCH 
RPMTAG_SUMMARY 
RPMTAG_DESCRIPTION 
RPMTAG_BUILDTIME 
RPMTAG_BUILDHOST 
RPMTAG_INSTALLTIME 
RPMTAG_SIZE 
RPMTAG_DISTRIBUTION 
RPMTAG_VENDOR 
RPMTAG_GIF 
RPMTAG_XPM 
RPMTAG_LICENSE 
RPMTAG_PACKAGER 
RPMTAG_GROUP 
RPMTAG_CHANGELOG 
RPMTAG_SOURCE 
RPMTAG_PATCH 
RPMTAG_URL 
RPMTAG_OS 
RPMTAG_ARCH 
RPMTAG_PREIN 
RPMTAG_POSTIN 
RPMTAG_PREUN 
RPMTAG_POSTUN 
RPMTAG_OLDFILENAMES 
RPMTAG_FILESIZES 
RPMTAG_FILESTATES 
RPMTAG_FILEMODES 
RPMTAG_FILEUIDS 
RPMTAG_FILEGIDS 
RPMTAG_FILERDEVS 
RPMTAG_FILEMTIMES 
RPMTAG_FILEDIGESTS 
RPMTAG_FILELINKTOS 
RPMTAG_FILEFLAGS 
RPMTAG_ROOT 
RPMTAG_FILEUSERNAME 
RPMTAG_FILEGROUPNAME 
RPMTAG_EXCLUDE 
RPMTAG_EXCLUSIVE 
RPMTAG_ICON 
RPMTAG_SOURCERPM 
RPMTAG_FILEVERIFYFLAGS 
RPMTAG_ARCHIVESIZE 
RPMTAG_PROVIDENAME 
RPMTAG_REQUIREFLAGS 
RPMTAG_REQUIRENAME 
RPMTAG_REQUIREVERSION 
RPMTAG_NOSOURCE 
RPMTAG_NOPATCH 
RPMTAG_CONFLICTFLAGS 
RPMTAG_CONFLICTNAME 
RPMTAG_CONFLICTVERSION 
RPMTAG_DEFAULTPREFIX 
RPMTAG_BUILDROOT 
RPMTAG_INSTALLPREFIX 
RPMTAG_EXCLUDEARCH 
RPMTAG_EXCLUDEOS 
RPMTAG_EXCLUSIVEARCH 
RPMTAG_EXCLUSIVEOS 
RPMTAG_AUTOREQPROV 
RPMTAG_RPMVERSION 
RPMTAG_TRIGGERSCRIPTS 
RPMTAG_TRIGGERNAME 
RPMTAG_TRIGGERVERSION 
RPMTAG_TRIGGERFLAGS 
RPMTAG_TRIGGERINDEX 
RPMTAG_VERIFYSCRIPT 
RPMTAG_CHANGELOGTIME 
RPMTAG_CHANGELOGNAME 
RPMTAG_CHANGELOGTEXT 
RPMTAG_BROKENMD5 
RPMTAG_PREREQ 
RPMTAG_PREINPROG 
RPMTAG_POSTINPROG 
RPMTAG_PREUNPROG 
RPMTAG_POSTUNPROG 
RPMTAG_BUILDARCHS 
RPMTAG_OBSOLETENAME 
RPMTAG_VERIFYSCRIPTPROG 
RPMTAG_TRIGGERSCRIPTPROG 
RPMTAG_DOCDIR 
RPMTAG_COOKIE 
RPMTAG_FILEDEVICES 
RPMTAG_FILEINODES 
RPMTAG_FILELANGS 
RPMTAG_PREFIXES 
RPMTAG_INSTPREFIXES 
RPMTAG_TRIGGERIN 
RPMTAG_TRIGGERUN 
RPMTAG_TRIGGERPOSTUN 
RPMTAG_AUTOREQ 
RPMTAG_AUTOPROV 
RPMTAG_CAPABILITY 
RPMTAG_SOURCEPACKAGE 
RPMTAG_OLDORIGFILENAMES 
RPMTAG_BUILDPREREQ 
RPMTAG_BUILDREQUIRES 
RPMTAG_BUILDCONFLICTS 
RPMTAG_BUILDMACROS 
RPMTAG_PROVIDEFLAGS 
RPMTAG_PROVIDEVERSION 
RPMTAG_OBSOLETEFLAGS 
RPMTAG_OBSOLETEVERSION 
RPMTAG_DIRINDEXES 
RPMTAG_BASENAMES 
RPMTAG_DIRNAMES 
RPMTAG_ORIGDIRINDEXES 
RPMTAG_ORIGBASENAMES 
RPMTAG_ORIGDIRNAMES 
RPMTAG_OPTFLAGS 
RPMTAG_DISTURL 
RPMTAG_PAYLOADFORMAT 
RPMTAG_PAYLOADCOMPRESSOR 
RPMTAG_PAYLOADFLAGS 
RPMTAG_INSTALLCOLOR 
RPMTAG_INSTALLTID 
RPMTAG_REMOVETID 
RPMTAG_SHA1RHN 
RPMTAG_RHNPLATFORM 
RPMTAG_PLATFORM 
RPMTAG_PATCHESNAME 
RPMTAG_PATCHESFLAGS 
RPMTAG_PATCHESVERSION 
RPMTAG_CACHECTIME 
RPMTAG_CACHEPKGPATH 
RPMTAG_CACHEPKGSIZE 
RPMTAG_CACHEPKGMTIME 
RPMTAG_FILECOLORS 
RPMTAG_FILECLASS 
RPMTAG_CLASSDICT 
RPMTAG_FILEDEPENDSX 
RPMTAG_FILEDEPENDSN 
RPMTAG_DEPENDSDICT 
RPMTAG_SOURCEPKGID 
RPMTAG_FILECONTEXTS 
RPMTAG_FSCONTEXTS 
RPMTAG_RECONTEXTS 
RPMTAG_POLICIES 
RPMTAG_PRETRANS 
RPMTAG_POSTTRANS 
RPMTAG_PRETRANSPROG 
RPMTAG_POSTTRANSPROG 
RPMTAG_DISTTAG 
RPMTAG_SUGGESTSNAME 
RPMTAG_SUGGESTSVERSION 
RPMTAG_SUGGESTSFLAGS 
RPMTAG_ENHANCESNAME 
RPMTAG_ENHANCESVERSION 
RPMTAG_ENHANCESFLAGS 
RPMTAG_PRIORITY 
RPMTAG_CVSID 
RPMTAG_BLINKPKGID 
RPMTAG_BLINKHDRID 
RPMTAG_BLINKNEVRA 
RPMTAG_FLINKPKGID 
RPMTAG_FLINKHDRID 
RPMTAG_FLINKNEVRA 
RPMTAG_PACKAGEORIGIN 
RPMTAG_TRIGGERPREIN 
RPMTAG_BUILDSUGGESTS 
RPMTAG_BUILDENHANCES 
RPMTAG_SCRIPTSTATES 
RPMTAG_SCRIPTMETRICS 
RPMTAG_BUILDCPUCLOCK 
RPMTAG_FILEDIGESTALGOS 
RPMTAG_VARIANTS 
RPMTAG_XMAJOR 
RPMTAG_XMINOR 
RPMTAG_REPOTAG 
RPMTAG_KEYWORDS 
RPMTAG_BUILDPLATFORMS 
RPMTAG_PACKAGECOLOR 
RPMTAG_PACKAGEPREFCOLOR 
RPMTAG_XATTRSDICT 
RPMTAG_FILEXATTRSX 
RPMTAG_DEPATTRSDICT 
RPMTAG_CONFLICTATTRSX 
RPMTAG_OBSOLETEATTRSX 
RPMTAG_PROVIDEATTRSX 
RPMTAG_REQUIREATTRSX 
RPMTAG_BUILDPROVIDES 
RPMTAG_BUILDOBSOLETES 
RPMTAG_FIRSTFREE_TAG  internal

Definition at line 196 of file rpmlib.h.

enum rpmTagReturnType_e

Identify how to return the header data type.

Enumerator:
RPM_ANY_RETURN_TYPE 
RPM_SCALAR_RETURN_TYPE 
RPM_ARRAY_RETURN_TYPE 
RPM_MAPPING_RETURN_TYPE 
RPM_MASK_RETURN_TYPE 

Definition at line 286 of file header.h.

enum rpmTagType_e

The basic types of data in tags from headers.

Enumerator:
RPM_NULL_TYPE 
RPM_CHAR_TYPE 
RPM_INT8_TYPE 
RPM_INT16_TYPE 
RPM_INT32_TYPE 
RPM_INT64_TYPE 
RPM_STRING_TYPE 
RPM_BIN_TYPE 
RPM_STRING_ARRAY_TYPE 
RPM_I18NSTRING_TYPE 
RPM_ASN1_TYPE 
RPM_OPENPGP_TYPE 
RPM_MASK_TYPE 

Definition at line 244 of file header.h.


Function Documentation

static int copyEntry ( const indexEntry  entry,
hTYP_t  type,
hPTR_t p,
hCNT_t  c,
int  minMem 
) [static]

Retrieve data from header entry.

Todo:
Permit retrieval of regions other than HEADER_IMUTABLE.
Parameters:
entry header entry
Return values:
type address of type (or NULL)
p address of data (or NULL)
c address of count (or NULL)
Parameters:
minMem string pointers refer to header memory?
Returns:
1 on success, otherwise error.

Definition at line 1504 of file header.c.

References entryInfo_s::count, ENTRY_IS_REGION, HEADER_IMAGE, indexEntry_s::info, REGION_TAG_COUNT, regionSwab(), RPM_ASN1_TYPE, RPM_BIN_TYPE, RPM_I18NSTRING_TYPE, RPM_OPENPGP_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, entryInfo_s::type, and xmalloc().

Referenced by headerGetRawEntry(), and intGetEntry().

static void* doHeaderUnload ( Header  h,
int *  lengthPtr 
) [static]

Parameters:
h header

Return values:
*lengthPtr no. bytes in unloaded header blob
Returns:
unloaded header blob (NULL on error)

Definition at line 626 of file header.c.

References _free(), entryInfo_s::count, indexEntry_s::data, ENTRY_IS_REGION, headerToken_s::flags, hdrchkData, hdrchkTags, HEADERFLAG_LEGACY, HEADERFLAG_SORTED, headerSort(), headerUnsort(), headerToken_s::index, headerToken_s::indexUsed, indexEntry_s::info, indexEntry_s::length, entryInfo_s::offset, indexEntry_s::rdlen, regionSwab(), RPM_INT16_TYPE, RPM_INT32_TYPE, RPM_INT64_TYPE, entryInfo_s::tag, entryInfo_s::type, typeSizes, and xmalloc().

static HV_t h2hv ( Header  h  )  [inline, static]

Definition at line 22 of file hdrinline.h.

Referenced by headerAddEntry(), headerAddI18NString(), headerAddOrAppendEntry(), headerAppendEntry(), headerCopy(), headerFree(), headerFreeTag(), headerGetEntry(), headerGetEntryMinMemory(), headerIsEntry(), headerLink(), headerModifyEntry(), headerReload(), headerRemoveEntry(), headerSizeof(), headerSort(), headerSprintf(), headerUnlink(), headerUnload(), headerUnsort(), and headerWrite().

static int headerAddEntry ( Header  h,
int_32  tag,
int_32  type,
const void *  p,
int_32  c 
) [inline, static]

Add tag to header.

Duplicate tags are okay, but only defined for iteration (with the exceptions noted below). While you are allowed to add i18n string arrays through this function, you probably don't mean to. See headerAddI18NString() instead.

Parameters:
h header
tag tag
type tag value data type
p pointer to tag value(s)
c number of values
Returns:
1 on success, 0 on failure

Definition at line 318 of file hdrinline.h.

References h2hv(), and HV_s::hdradd.

Referenced by addFileToTag(), compressFilelist(), doIcon(), expandFilelist(), fillOutMainPackage(), genCpioListAndHeader(), handlePreambleTag(), hCopyTag(), headerMergeLegacySigs(), headerRegenSigHeader(), hSaveBlinks(), hSaveFlinks(), initSourceHeader(), makeHDRSignature(), mungeFilelist(), packageBinaries(), packageSources(), parsePreamble(), parseScript(), parseSpec(), populateInstallHeader(), rpmAddSignature(), rpmcliImportPubkey(), rpmdbAdd(), rpmdbRemove(), rpmfcGenerateDepends(), rpmfiNew(), rpmMergeHeaders(), rpmReSign(), and writeRPM().

static int headerAddI18NString ( Header  h,
int_32  tag,
const char *  string,
const char *  lang 
) [inline, static]

Add locale specific tag to header.

A NULL lang is interpreted as the C locale. Here are the rules:

 *	- If the tag isn't in the header, it's added with the passed string
 *	   as new value.
 *	- If the tag occurs multiple times in entry, which tag is affected
 *	   by the operation is undefined.
 *	- If the tag is in the header w/ this language, the entry is
 *	   *replaced* (like headerModifyEntry()).
 * 
This function is intended to just "do the right thing". If you need more fine grained control use headerAddEntry() and headerModifyEntry().

Parameters:
h header
tag tag
string tag value
lang locale
Returns:
1 on success, 0 on failure

Definition at line 385 of file hdrinline.h.

References h2hv(), and HV_s::hdraddi18n.

Referenced by handlePreambleTag(), and parseDescription().

static int headerAddOrAppendEntry ( Header  h,
int_32  tag,
int_32  type,
const void *  p,
int_32  c 
) [inline, static]

Add or append element to tag array in header.

Todo:
Arg "p" should have const.
Parameters:
h header
tag tag
type tag value data type
p pointer to tag value(s)
c number of values
Returns:
1 on success, 0 on failure

Definition at line 357 of file hdrinline.h.

References h2hv(), and HV_s::hdraddorappend.

Referenced by addChangelogEntry(), addFileToArrayTag(), addOrAppendListEntry(), addReqProv(), genCpioListAndHeader(), initSourceHeader(), processMetadataFile(), processScriptFiles(), providePackageNVR(), and rpmcliImportPubkey().

static int headerAppendEntry ( Header  h,
int_32  tag,
int_32  type,
const void *  p,
int_32  c 
) [inline, static]

Append element to tag array in header.

Appends item p to entry w/ tag and type as passed. Won't work on RPM_STRING_TYPE. Any pointers into header memory returned from headerGetEntryMinMemory() for this entry are invalid after this call has been made!

Parameters:
h header
tag tag
type tag value data type
p pointer to tag value(s)
c number of values
Returns:
1 on success, 0 on failure

Definition at line 339 of file hdrinline.h.

References h2hv(), and HV_s::hdrappend.

static Header headerCopy ( Header  h  )  [inline, static]

Duplicate a header.

Parameters:
h header
Returns:
new header instance

Definition at line 163 of file hdrinline.h.

References h2hv(), and HV_s::hdrcopy.

Referenced by hdrUnload(), and rpmdbRebuild().

static Header headerCopyLoad ( const void *  uh  )  [inline, static]

Make a copy and convert header to in-memory representation.

Parameters:
uh on-disk header blob (i.e. with offsets)
Returns:
header

Definition at line 187 of file hdrinline.h.

References HV_s::hdrcopyload, and hdrVec.

Referenced by rpmdbNextIterator(), rpmpsmStage(), and rpmReSign().

static void headerCopyTags ( Header  headerFrom,
Header  headerTo,
hTAG_t  tagstocopy 
) [inline, static]

Duplicate tag values from one header into another.

Parameters:
headerFrom source header
headerTo destination header
tagstocopy array of tags that are copied

Definition at line 454 of file hdrinline.h.

References HV_s::hdrcopytags, and hdrVec.

Referenced by packageBinaries(), and parsePreamble().

void headerDump ( Header  h,
FILE *  f,
int  flags,
const struct headerTagTableEntry_s tags 
)

Dump a header in human readable format (for debugging).

Parameters:
h header
f file handle
flags 0 or HEADER_DUMP_INLINE
tags array of tag name/value pairs

Definition at line 35 of file header_internal.c.

References _, entryInfo_s::count, indexEntry_s::data, HEADER_DUMP_INLINE, headerToken_s::index, headerToken_s::indexUsed, indexEntry_s::info, headerTagTableEntry_s::name, entryInfo_s::offset, RPM_BIN_TYPE, RPM_CHAR_TYPE, RPM_I18NSTRING_TYPE, RPM_INT16_TYPE, RPM_INT32_TYPE, RPM_INT8_TYPE, RPM_NULL_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, entryInfo_s::tag, entryInfo_s::type, headerTagTableEntry_s::type, and headerTagTableEntry_s::val.

static Header headerFree ( Header  h  )  [inline, static]

Dereference a header instance.

Parameters:
h header
Returns:
NULL always

Definition at line 47 of file hdrinline.h.

References h2hv(), and HV_s::hdrfree.

Referenced by delTE(), freePackage(), freeSpec(), hdr_dealloc(), hdrLoad(), hdrUnload(), IDTXfree(), IDTXglob(), makeHDRSignature(), miFreeHeader(), readFile(), readRPM(), rpmcliImportPubkey(), rpmdb_subscript(), rpmdbFindByFile(), rpmdbRebuild(), rpmdsFree(), rpmfiFree(), rpmFreeSignature(), rpmgiFree(), rpmgiLoadReadHeader(), rpmgiNext(), rpmgiReadHeader(), rpmgiWalkReadHeader(), rpmInstall(), rpmInstallSourcePackage(), rpmMergeHeaders(), rpmpsmStage(), rpmReadHeader(), rpmReadHeaders(), rpmReadPackageFile(), rpmReadSignature(), rpmReSign(), rpmRollback(), rpmSingleHeaderFromFD(), rpmteSetHeader(), rpmts_HdrFromFdno(), rpmtsRun(), rpmtsSolve(), and writeRPM().

static void* headerFreeData ( const void *  data,
rpmTagType  type 
) [inline, static]

Free data allocated when retrieved from header.

Deprecated:
Use headerFreeTag() instead.
Todo:
Remove from API.
Parameters:
data address of data (or NULL)
type type of data (or -1 to force free)
Returns:
NULL always

Definition at line 800 of file header.h.

References RPM_BIN_TYPE, RPM_I18NSTRING_TYPE, and RPM_STRING_ARRAY_TYPE.

Referenced by addReqProv(), addTE(), compressFilelist(), findErases(), formatValue(), getSignid(), handleOneTrigger(), handlePreambleTag(), hCopyTag(), headerMacrosLoad(), headerMacrosUnload(), headerMergeLegacySigs(), headerRegenSigHeader(), hLoadTID(), initSourceHeader(), instprefixTag(), isMemberInEntry(), makeHDRSignature(), mireSkip(), providePackageNVR(), readFile(), relocateFileList(), rpmdbAdd(), rpmdbFindByFile(), rpmdbFindFpList(), rpmdbRemove(), rpmdsFree(), rpmdsNew(), rpmfiBuildFNames(), rpmfiFree(), rpmfiNew(), rpmInstall(), rpmMergeHeaders(), rpmpsmStage(), rpmReadPackageFile(), rpmReSign(), rpmteChain(), rpmtsCleanDig(), rpmtsFindPubkey(), rpmtsSetSig(), rpmVerifySignatures(), runImmedTriggers(), runInstScript(), runScript(), timeCheck(), triggercondsTag(), and triggertypeTag().

static HeaderIterator headerFreeIterator ( HeaderIterator  hi  )  [inline, static]

Destroy header tag iterator.

Parameters:
hi header tag iterator
Returns:
NULL always

Definition at line 469 of file hdrinline.h.

References HV_s::hdrfreeiter, and hdrVec.

Referenced by checkForDuplicates(), hdrKeyList(), headerMergeLegacySigs(), headerRegenSigHeader(), hsaFini(), initSourceHeader(), rpmMergeHeaders(), rpmpsmStage(), rpmReSign(), and rpmVerifySignatures().

static void * headerFreeTag ( Header  h,
const void *  data,
rpmTagType  type 
) [inline, static]

Free data allocated when retrieved from header.

Parameters:
h header
data pointer to tag value(s)
type type of data (or -1 to force free)
Returns:
NULL always

Definition at line 247 of file hdrinline.h.

References h2hv(), and HV_s::hdrfreetag.

static int headerGetEntry ( Header  h,
int_32  tag,
hTYP_t  type,
void **  p,
hCNT_t  c 
) [inline, static]

Retrieve tag value.

Will never return RPM_I18NSTRING_TYPE! RPM_STRING_TYPE elements with RPM_I18NSTRING_TYPE equivalent entries are translated (if HEADER_I18NTABLE entry is present).

Parameters:
h header
tag tag
Return values:
*type tag value data type (or NULL)
*p pointer to tag value(s) (or NULL)
*c number of values (or NULL)
Returns:
1 on success, 0 on failure

Definition at line 269 of file hdrinline.h.

References h2hv(), and HV_s::hdrget.

Referenced by formatValue(), getSignid(), hCopyTag(), headerNEVRA(), headerNVR(), hGetNEVRA(), hLoadTID(), IDTXglob(), IDTXload(), makeHDRSignature(), readFile(), rpmdbExportInfo(), rpmdsNew(), rpmfiNew(), rpmHeaderGetEntry(), rpmHeadersIdentical(), rpmInstall(), rpmMergeHeaders(), rpmpsmStage(), rpmReadPackageFile(), rpmReadSignature(), rpmReSign(), rpmteNew(), rpmtsFindPubkey(), rpmtsSolve(), rpmVerifySignatures(), rpmVersionCompare(), singleSprintf(), and writeRPM().

static int headerGetEntryMinMemory ( Header  h,
int_32  tag,
hTYP_t  type,
hPTR_t p,
hCNT_t  c 
) [inline, static]

Retrieve tag value using header internal array.

Get an entry using as little extra RAM as possible to return the tag value. This is only an issue for RPM_STRING_ARRAY_TYPE.

Parameters:
h header
tag tag
Return values:
*type tag value data type (or NULL)
*p pointer to tag value(s) (or NULL)
*c number of values (or NULL)
Returns:
1 on success, 0 on failure

Definition at line 292 of file hdrinline.h.

References h2hv(), and HV_s::hdrgetmin.

Referenced by addFileToTag(), addReqProv(), addTE(), compressFilelist(), findErases(), fssizesTag(), handlePreambleTag(), headerMacrosLoad(), headerMacrosUnload(), hGetColor(), i18nTag(), instprefixTag(), isMemberInEntry(), localeTag(), mireSkip(), processPackageFiles(), providePackageNVR(), rpmdbAdd(), rpmdbFindByFile(), rpmdbFindFpList(), rpmdbRemove(), rpmdsNew(), rpmdsNVRMatchesDep(), rpmdsThis(), rpmfcGenerateScriptletDeps(), rpmfiBuildFNames(), rpmfiNew(), rpmteChain(), rpmtsAddInstallElement(), stashSt(), timeCheck(), triggercondsTag(), triggertypeTag(), and writeRPM().

static int headerGetInstance ( Header  h  )  [inline, static]

Return header instance (if from rpmdb).

Parameters:
h header
Returns:
header instance

Definition at line 538 of file hdrinline.h.

References HV_s::hdrgetinstance, and hdrVec.

Referenced by rpmgiNext(), rpmpsmStage(), and verifyDependencies().

char** headerGetLangs ( Header  h  ) 

Return array of locales found in header.

The array is terminated with a NULL sentinel.

Parameters:
h header
Returns:
array of locales (or NULL on error)

Definition at line 13 of file header_internal.c.

References HEADER_I18NTABLE, headerGetRawEntry(), and xcalloc().

static const char * headerGetOrigin ( Header  h  )  [inline, static]

Return header origin (e.g path or URL).

Parameters:
h header
Returns:
header origin

Definition at line 513 of file hdrinline.h.

References HV_s::hdrgetorigin, and hdrVec.

Referenced by hdrGetOrigin(), IDTXglob(), and populateInstallHeader().

int headerGetRawEntry ( Header  h,
int_32  tag,
hTYP_t  type,
hPTR_t p,
hCNT_t  c 
)

Retrieve tag value with type match.

If *type is RPM_NULL_TYPE any type will match, otherwise only *type will match.

Parameters:
h header
tag tag
Return values:
type address of tag value data type (or NULL)
p address of pointer to tag value(s) (or NULL)
c address of number of values (or NULL)
Returns:
1 on success, 0 on failure

static HeaderIterator headerInitIterator ( Header  h  )  [inline, static]

Create header tag iterator.

Parameters:
h header
Returns:
header tag iterator

Definition at line 481 of file hdrinline.h.

References HV_s::hdrinititer, and hdrVec.

Referenced by checkForDuplicates(), hdrKeyList(), headerMergeLegacySigs(), headerRegenSigHeader(), hsaInit(), initSourceHeader(), rpmMergeHeaders(), rpmpsmStage(), rpmReSign(), and rpmVerifySignatures().

static int headerIsEntry ( Header  h,
int_32  tag 
) [inline, static]

Check if tag is in header.

Parameters:
h header
tag tag
Returns:
1 on success, 0 on failure

Definition at line 230 of file hdrinline.h.

References h2hv(), and HV_s::hdrisentry.

Referenced by addTE(), checkForRequired(), checkSpec(), compressFilelist(), expandFilelist(), fillOutMainPackage(), headerGetRawEntry(), headerMergeLegacySigs(), headerRegenSigHeader(), IDTXglob(), makeHDRSignature(), mungeFilelist(), parseDescription(), parseScript(), parseSpec(), readFile(), relocateFileList(), rpmdbAdd(), rpmdbNextIterator(), rpmdbRebuild(), rpmfiNew(), rpmInstall(), rpmInstallSourcePackage(), rpmpsmStage(), rpmReadPackageFile(), rpmtsAddInstallElement(), rpmVerifySignatures(), showVerifyPackage(), and singleSprintf().

static Header headerLink ( Header  h  )  [inline, static]

Reference a header instance.

Parameters:
h header
Returns:
new header reference

Definition at line 62 of file hdrinline.h.

References h2hv(), and HV_s::hdrlink.

Referenced by hdr_Wrap(), hdrUnload(), IDTXglob(), IDTXload(), relocateFileList(), rpmdbFindByFile(), rpmdbRemove(), rpmdsDup(), rpmdsNew(), rpmfiNew(), rpmgiLoadReadHeader(), rpmgiNext(), rpmgiWalkReadHeader(), rpmInstallSourcePackage(), rpmpsmStage(), rpmReadHeader(), rpmReadPackageFile(), rpmReadSignature(), rpmReSign(), rpmteHeader(), rpmteSetHeader(), rpmtsSolve(), and writeRPM().

static Header headerLoad ( void *  uh  )  [inline, static]

Convert header to in-memory representation.

Parameters:
uh on-disk header blob (i.e. with offsets)
Returns:
header

Definition at line 175 of file hdrinline.h.

References HV_s::hdrload, and hdrVec.

Referenced by hdrLoad(), rpmdbNextIterator(), rpmReadHeader(), and rpmReadSignature().

void headerMergeLegacySigs ( Header  h,
const Header  sigh 
)

Translate and merge legacy signature tags into header.

Todo:
Remove headerSort() through headerInitIterator() modifies sig.
Parameters:
h header
sigh signature header

Definition at line 97 of file package.c.

References hdrchkData, hdrchkType, HEADER_SIGBASE, HEADER_TAGBASE, headerAddEntry(), headerFreeData(), headerFreeIterator(), headerInitIterator(), headerIsEntry(), headerNextIterator(), RPM_BIN_TYPE, RPM_CHAR_TYPE, RPM_I18NSTRING_TYPE, RPM_INT16_TYPE, RPM_INT32_TYPE, RPM_INT8_TYPE, RPM_NULL_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, RPMSIGTAG_DSA, RPMSIGTAG_GPG, RPMSIGTAG_LEMD5_1, RPMSIGTAG_LEMD5_2, RPMSIGTAG_MD5, RPMSIGTAG_PAYLOADSIZE, RPMSIGTAG_PGP, RPMSIGTAG_PGP5, RPMSIGTAG_RSA, RPMSIGTAG_SHA1, RPMSIGTAG_SIZE, RPMTAG_ARCHIVESIZE, RPMTAG_SIGGPG, RPMTAG_SIGLEMD5_1, RPMTAG_SIGLEMD5_2, RPMTAG_SIGMD5, RPMTAG_SIGPGP, RPMTAG_SIGPGP5, and RPMTAG_SIGSIZE.

Referenced by rpmReadPackageFile(), and writeRPM().

static int headerModifyEntry ( Header  h,
int_32  tag,
int_32  type,
const void *  p,
int_32  c 
) [inline, static]

Modify tag in header.

If there are multiple entries with this tag, the first one gets replaced.

Parameters:
h header
tag tag
type tag value data type
p pointer to tag value(s)
c number of values
Returns:
1 on success, 0 on failure

Definition at line 403 of file hdrinline.h.

References h2hv(), and HV_s::hdrmodify.

Referenced by rpmfiNew().

int headerNEVRA ( Header  h,
const char **  np,
const char **  ep,
const char **  vp,
const char **  rp,
const char **  ap 
)

Return name, epoch, version, release, arch strings from header.

Parameters:
h header
Return values:
*np name pointer (or NULL)
*ep epoch pointer (or NULL)
*vp version pointer (or NULL)
*rp release pointer (or NULL)
*ap arch pointer (or NULL)
Returns:
0 always

Definition at line 162 of file hdrNVR.c.

References headerGetEntry(), RPM_STRING_TYPE, RPMTAG_ARCH, RPMTAG_NAME, RPMTAG_RELEASE, and RPMTAG_VERSION.

static Header headerNew ( void   )  [inline, static]

Create new (empty) header instance.

Returns:
header

Definition at line 35 of file hdrinline.h.

References HV_s::hdrnew, and hdrVec.

Referenced by newPackage(), newSpec(), rpmcliImportPubkey(), rpmNewSignature(), rpmpsmStage(), and rpmReSign().

static int headerNextIterator ( HeaderIterator  hi,
hTAG_t  tag,
hTYP_t  type,
hPTR_t p,
hCNT_t  c 
) [inline, static]

Return next tag from header.

Parameters:
hi header tag iterator
Return values:
*tag tag
*type tag value data type
*p pointer to tag value(s)
*c number of values
Returns:
1 on success, 0 on failure

Definition at line 497 of file hdrinline.h.

References HV_s::hdrnextiter, and hdrVec.

Referenced by checkForDuplicates(), hdrKeyList(), headerMergeLegacySigs(), headerRegenSigHeader(), hsaNext(), initSourceHeader(), rpmMergeHeaders(), rpmpsmStage(), rpmReSign(), and rpmVerifySignatures().

int headerNVR ( Header  h,
const char **  np,
const char **  vp,
const char **  rp 
)

Return name, version, release strings from header.

Parameters:
h header
Return values:
*np name pointer (or NULL)
*vp version pointer (or NULL)
*rp release pointer (or NULL)
Returns:
0 always

Definition at line 137 of file hdrNVR.c.

References headerGetEntry(), RPM_STRING_TYPE, RPMTAG_NAME, RPMTAG_RELEASE, and RPMTAG_VERSION.

Referenced by doSetupMacro(), genSourceRpmName(), handleOneTrigger(), hGetNEVR(), hGetNEVRA(), i18nTag(), lookupPackage(), packageBinaries(), parsePreamble(), parseSpec(), printNewSpecfile(), processBinaryFiles(), providePackageNVR(), rpmdbRebuild(), rpmdbRemove(), rpmdsNVRMatchesDep(), rpmdsThis(), rpmInstall(), rpmtsCallback(), runScript(), and writeRPM().

static Header headerRead ( FD_t  fd,
enum hMagic  magicp 
) [inline, static]

Read (and load) header from file handle.

Parameters:
fd file handle
magicp read (and verify) 8 bytes of (magic, 0)?
Returns:
header (or NULL on error)

Definition at line 200 of file hdrinline.h.

References HV_s::hdrread, and hdrVec.

Referenced by makeHDRSignature(), readFile(), rpmgiNext(), rpmMergeHeaders(), rpmReadHeaders(), rpmSingleHeaderFromFD(), and writeRPM().

Header headerRegenSigHeader ( const Header  h,
int  noArchiveSize 
)

Regenerate signature header.

Todo:
Remove headerSort() through headerInitIterator() modifies h.
Parameters:
h header
noArchiveSize don't copy archive size tag (pre rpm-4.1)
Returns:
regenerated signature header

Definition at line 177 of file package.c.

References HEADER_SIGBASE, HEADER_TAGBASE, headerAddEntry(), headerFreeData(), headerFreeIterator(), headerInitIterator(), headerIsEntry(), headerNextIterator(), rpmNewSignature(), RPMSIGTAG_GPG, RPMSIGTAG_LEMD5_1, RPMSIGTAG_LEMD5_2, RPMSIGTAG_MD5, RPMSIGTAG_PAYLOADSIZE, RPMSIGTAG_PGP, RPMSIGTAG_PGP5, RPMSIGTAG_SIZE, RPMTAG_ARCHIVESIZE, RPMTAG_DSAHEADER, RPMTAG_RSAHEADER, RPMTAG_SHA1HEADER, RPMTAG_SIGGPG, RPMTAG_SIGLEMD5_1, RPMTAG_SIGLEMD5_2, RPMTAG_SIGMD5, RPMTAG_SIGPGP, RPMTAG_SIGPGP5, and RPMTAG_SIGSIZE.

Referenced by rpmpsmStage().

static Header headerReload ( Header  h,
int  tag 
) [inline, static]

Convert header to on-disk representation, and then reload.

This is used to insure that all header data is in one chunk.

Parameters:
h header (with pointers)
tag region tag
Returns:
on-disk header (with offsets)

Definition at line 149 of file hdrinline.h.

References h2hv(), and HV_s::hdrreload.

Referenced by rpmpsmStage(), rpmReSign(), and writeRPM().

static int headerRemoveEntry ( Header  h,
int_32  tag 
) [inline, static]

Delete tag in header.

Removes all entries of type tag from the header, returns 1 if none were found.

Parameters:
h header
tag tag
Returns:
0 on success, 1 on failure (INCONSISTENT)

Definition at line 420 of file hdrinline.h.

References h2hv(), and HV_s::hdrremove.

Referenced by addFileToTag(), compressFilelist(), expandFilelist(), rpmdbAdd(), rpmfcGenerateDepends(), rpmfiNew(), rpmMergeHeaders(), and rpmReSign().

static int headerSetInstance ( Header  h,
int  instance 
) [inline, static]

Store header instance (e.g path or URL).

Parameters:
h header
instance new header instance
Returns:
0 always

Definition at line 551 of file hdrinline.h.

References HV_s::hdrsetinstance, and hdrVec.

Referenced by rpmdbAdd(), rpmdbNextIterator(), and rpmpsmStage().

static int headerSetOrigin ( Header  h,
const char *  origin 
) [inline, static]

Store header origin (e.g path or URL).

Parameters:
h header
origin new header origin
Returns:
0 always

Definition at line 526 of file hdrinline.h.

References HV_s::hdrsetorigin, and hdrVec.

Referenced by hdrSetOrigin(), rpmdbNextIterator(), and rpmReadHeader().

static unsigned int headerSizeof ( Header  h,
enum hMagic  magicp 
) [inline, static]

Return size of on-disk header representation in bytes.

Parameters:
h header
magicp include size of 8 bytes for (magic, 0)?
Returns:
size of on-disk header

Definition at line 120 of file hdrinline.h.

References h2hv(), and HV_s::hdrsizeof.

Referenced by hdrUnload(), miFreeHeader(), readFile(), rpmdbAdd(), rpmReadSignature(), and rpmWriteSignature().

static void headerSort ( Header  h  )  [inline, static]

Sort tags in header.

Parameters:
h header

Definition at line 89 of file hdrinline.h.

References h2hv(), and HV_s::hdrsort.

Referenced by doHeaderUnload(), and findEntry().

static char * headerSprintf ( Header  h,
const char *  fmt,
const struct headerTagTableEntry_s tbltags,
const struct headerSprintfExtension_s extensions,
errmsg_t errmsg 
) [inline, static]

Return formatted output string from header tags.

The returned string must be free()d.

Parameters:
h header
fmt format to use
tbltags array of tag name/value pairs
extensions chained table of formatting extensions.
Return values:
errmsg error message (if any)
Returns:
formatted output string (malloc'ed)

Definition at line 438 of file hdrinline.h.

References h2hv(), and HV_s::hdrsprintf.

Referenced by hdrPrintErased(), hdrPrintInstalled(), hdrSprintf(), packageBinaries(), printNewSpecfile(), queryHeader(), rpmcliImportPubkey(), rpmHeaderGetEntry(), rpmpsmStage(), rpmShowProgress(), rpmtsSolve(), and runScript().

static Header headerUnlink ( Header  h  )  [inline, static]

Dereference a header instance.

Parameters:
h header
Returns:
new header reference

Definition at line 74 of file hdrinline.h.

References h2hv(), and HV_s::hdrunlink.

static void * headerUnload ( Header  h  )  [inline, static]

Convert header to on-disk representation.

Parameters:
h header (with pointers)
Returns:
on-disk header blob (i.e. with offsets)

Definition at line 135 of file hdrinline.h.

References h2hv(), and HV_s::hdrunload.

Referenced by hdrUnload(), miFreeHeader(), and rpmdbAdd().

static void headerUnsort ( Header  h  )  [inline, static]

Restore tags in header to original ordering.

Parameters:
h header

Definition at line 103 of file hdrinline.h.

References h2hv(), and HV_s::hdrunsort.

Referenced by doHeaderUnload().

static int headerUsageCount ( Header  h  )  [inline, static]

Return header reference count.

Parameters:
h header
Returns:
no. of references

Definition at line 189 of file header_internal.h.

References headerToken_s::nrefs.

static int headerWrite ( FD_t  fd,
Header  h,
enum hMagic  magicp 
) [inline, static]

Write (with unload) header to file handle.

Parameters:
fd file handle
h header
magicp prefix write with 8 bytes of (magic, 0)?
Returns:
0 on success, 1 on error

Definition at line 214 of file hdrinline.h.

References h2hv(), and HV_s::hdrwrite.

Referenced by makeHDRSignature(), rpmpsmStage(), rpmWriteSignature(), and writeRPM().

static int regionSwab ( indexEntry  entry,
int  il,
int  dl,
entryInfo  pe,
unsigned char *  dataStart,
const unsigned char *  dataEnd,
int  regionid 
) [static]

Swap int_32 and int_16 arrays within header region.

This code is way more twisty than I would like.

A bug with RPM_I18NSTRING_TYPE in rpm-2.5.x (fixed in August 1998) causes the offset and length of elements in a header region to disagree regarding the total length of the region data.

The "fix" is to compute the size using both offset and length and return the larger of the two numbers as the size of the region. Kinda like computing left and right Riemann sums of the data elements to determine the size of a data structure, go figger :-).

There's one other twist if a header region tag is in the set to be swabbed, as the data for a header region is located after all other tag data.

Parameters:
entry header entry
il no. of entries
dl start no. bytes of data
pe header physical entry pointer (swapped)
dataStart header data start
dataEnd header data end
regionid region offset
Returns:
no. bytes of data in region, -1 on error

Definition at line 477 of file header.c.

References entryInfo_s::count, dataLength(), hdrchkAlign, hdrchkData, hdrchkType, HEADER_I18NTABLE, HEADER_IMAGE, indexEntry_s::info, entryInfo_s::offset, REGION_TAG_COUNT, RPM_I18NSTRING_TYPE, RPM_INT16_TYPE, RPM_INT32_TYPE, RPM_INT64_TYPE, entryInfo_s::tag, entryInfo_s::type, and typeSizes.

Referenced by copyEntry(), and doHeaderUnload().


Variable Documentation

struct HV_s* hdrVec

Header methods for rpm headers.

Definition at line 122 of file header.c.

Referenced by headerCopyLoad(), headerCopyTags(), headerFreeIterator(), headerGetInstance(), headerGetOrigin(), headerInitIterator(), headerLoad(), headerNew(), headerNextIterator(), headerRead(), headerSetInstance(), and headerSetOrigin().

unsigned char header_magic[8] [static]

Initial value:

 {
        0x8e, 0xad, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00
}

Definition at line 38 of file header.c.

struct headerSprintfExtension_s headerDefaultFormats[]

Supported default header tag output formats.

Definition at line 3952 of file header.c.

Referenced by queryHeader().

size_t headerMaxbytes = (32*1024*1024) [static]

Maximum no.

of bytes permitted in a header.

Definition at line 92 of file header.c.

int typeAlign[16] [static]

Initial value:

  {
    1,  
    1,  
    1,  
    2,  
    4,  
    8,  
    1,  
    1,  
    1,  
    1,  
    1,  
    1,  
    0,
    0,
    0,
    0
}
Alignment needed for header data types.

Definition at line 46 of file header.c.

int typeSizes[16] [static]

Initial value:

  { 
    0,  
    1,  
    1,  
    2,  
    4,  
    8,  
    -1, 
    1,  
    -1, 
    -1, 
    1,  
    1,  
    0,
    0,
    0,
    0
}
Size of header data types.

Definition at line 69 of file header.c.

Referenced by dataLength(), doHeaderUnload(), and regionSwab().


Generated on Fri May 25 21:20:36 2007 for rpm by  doxygen 1.5.2