rpm  4.5
Data Structures | Files | Typedefs | Enumerations | Functions | Variables
HEADER.
Collaboration diagram for HEADER.:

Data Structures

struct  _HE_s
struct  headerToken_s
 The Header data structure. More...

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

Typedefs

typedef enum rpmTag_e rpmTag
 Tags identify data in package headers.
typedef const char * errmsg_t
typedef struct headerToken_sHeader
typedef enum rpmTagType_e rpmTagType
typedef union rpmDataType_u rpmTagData
typedef int_32 rpmTagCount
typedef struct _HE_sHE_t
typedef union rpmDataType_u hRET_t
typedef int_32hTAG_t
typedef struct headerIterator_sHeaderIterator
typedef struct
headerTagTableEntry_s
headerTagTableEntry
 Associate tag names with numeric values.
typedef char *(* headerTagFormatFunction )(HE_t he, const char **av)
 HEADER_EXT_TAG format function prototype.
typedef int(* headerTagTagFunction )(Header h, HE_t he)
 HEADER_EXT_FORMAT format function prototype.
typedef struct
headerSprintfExtension_s
headerSprintfExtension
 Define header tag output formats.
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 )(void *_fd, enum hMagic magicp)
 Read (and load) header from file handle.
typedef int(* HDRwrite )(void *_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(* HDRext )(Header h, int_32 tag, hTYP_t type, hRET_t *p, hCNT_t c)
 Retrieve extension or tag value.
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, void *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 *exts, 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 int(* HDRgetmagic )(Header h, unsigned char **magicp, size_t *nmagicp)
 Return header magic.
typedef int(* HDRsetmagic )(Header h, unsigned char *magic, size_t nmagic)
 Store header magic.
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 struct HV_sHV_t
 Header method vectors.
typedef struct entryInfo_sentryInfo
 Description of tag data.
typedef struct indexEntry_sindexEntry
 A single tag from a Header.
typedef struct sprintfTag_ssprintfTag
typedef struct 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
}
 Tags identify data in package headers. 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  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  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 (void *_fd, enum hMagic magicp)
 Read (and load) header from file handle.
static int headerWrite (void *_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, void *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 *tags, const struct headerSprintfExtension_s *exts, 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).
const char * headerGetBaseURL (Header h)
 Return header base URL (e.g path or URL).
int headerSetBaseURL (Header h, const char *baseurl)
 Store header base URL (e.g path or URL).
struct stat * headerGetStatbuf (Header h)
 Return header stat(2) buffer (of origin *.rpm file).
int headerSetStatbuf (Header h, struct stat *st)
 Copy into header stat(2) buffer (of origin *.rpm file).
const char * headerGetDigest (Header h)
 Return digest of origin *.rpm file.
int headerSetDigest (Header h, const char *digest)
 Store digest of origin *.rpm file.
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).
uint32_t headerGetStartOff (Header h)
 Return header starting byte offset.
uint32_t headerSetStartOff (Header h, uint32_t startoff)
 Store header starting byte offset.
uint32_t headerGetEndOff (Header h)
 Return header ending byte offset.
uint32_t headerSetEndOff (Header h, uint32_t endoff)
 Store header ending byte offset.
static void * headerGetStats (Header h, int opx)
 Return header stats accumulator structure.
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, size_t *lenp)
static int copyEntry (const indexEntry entry, rpmTagType *type, rpmTagData *p, rpmTagCount *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, rpmTagType *type, void *p, rpmTagCount *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

struct HV_shdrVec = &hdrVec1
 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.
struct headerSprintfExtension_s headerDefaultFormats []
 Supported default header tag output formats.

Typedef Documentation

typedef struct entryInfo_s* entryInfo

Description of tag data.

Definition at line 26 of file header_internal.h.

typedef const char* errmsg_t

Definition at line 102 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:
hheader
tagtag
typetag value data type
ptag value(s)
cnumber of values
Returns:
1 on success, 0 on failure

Definition at line 661 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:
hheader
tagtag
stringtag value
langlocale
Returns:
1 on success, 0 on failure

Definition at line 717 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:
hheader
tagtag
typetag value data type
ptag value(s)
cnumber of values
Returns:
1 on success, 0 on failure

Definition at line 693 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:
hheader
tagtag
typetag value data type
ptag value(s)
cnumber of values
Returns:
1 on success, 0 on failure

Definition at line 679 of file header.h.

typedef Header(* HDRcopy)(Header h)

Duplicate a header.

Parameters:
hheader
Returns:
new header instance

Definition at line 525 of file header.h.

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

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

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

Definition at line 543 of file header.h.

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

Duplicate tag values from one header into another.

Parameters:
headerFromsource header
headerTodestination header
tagstocopyarray of tags that are copied

Definition at line 773 of file header.h.

typedef int(* HDRext)(Header h, int_32 tag,hTYP_t type,hRET_t *p,hCNT_t c)

Retrieve extension or tag value.

Parameters:
hheader
tagtag
Return values:
*typetag value data type (or NULL)
*ptag value(s) (or NULL)
*cnumber of values (or NULL)
Returns:
1 on success, 0 on failure

Definition at line 601 of file header.h.

typedef Header(* HDRfree)(Header h)

Dereference a header instance.

Parameters:
hheader
Returns:
NULL always

Definition at line 450 of file header.h.

Destroy header tag iterator.

Parameters:
hiheader tag iterator
Returns:
NULL always

Definition at line 782 of file header.h.

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

Free data allocated when retrieved from header.

Parameters:
hheader
dataaddress of data (or NULL)
typetype of data (or -1 to force free)
Returns:
NULL always

Definition at line 586 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:
hheader
tagtag
Return values:
*typetag value data type (or NULL)
*ptag value(s) (or NULL)
*cnumber of values (or NULL)
Returns:
1 on success, 0 on failure

Definition at line 621 of file header.h.

typedef int(* HDRgetinstance)(Header h)

Return header instance (if from rpmdb).

Parameters:
hheader
Returns:
header instance

Definition at line 858 of file header.h.

typedef int(* HDRgetmagic)(Header h, unsigned char **magicp, size_t *nmagicp)

Return header magic.

Parameters:
hheader
*magicpmagic array
*nmagicpno. bytes of magic
Returns:
0 always

Definition at line 819 of file header.h.

typedef int(* HDRgetmin)(Header h, int_32 tag,hTYP_t type,void *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:
hheader
tagtag
Return values:
*typetag value data type (or NULL)
*ptag value(s) (or NULL)
*cnumber of values (or NULL)
Returns:
1 on success, 0 on failure

Definition at line 640 of file header.h.

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

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

Parameters:
hheader
Returns:
header origin

Definition at line 839 of file header.h.

Create header tag iterator.

Parameters:
hheader
Returns:
header tag iterator

Definition at line 791 of file header.h.

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

Check if tag is in header.

Parameters:
hheader
tagtag
Returns:
1 on success, 0 on failure

Definition at line 575 of file header.h.

typedef Header(* HDRlink)(Header h)

Reference a header instance.

Parameters:
hheader
Returns:
referenced header instance

Definition at line 459 of file header.h.

typedef Header(* HDRload)(void *uh)

Convert header to in-memory representation.

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

Definition at line 534 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:
hheader
tagtag
typetag value data type
ptag value(s)
cnumber of values
Returns:
1 on success, 0 on failure

Definition at line 732 of file header.h.

typedef Header(* HDRnew)(void)

Create new (empty) header instance.

Returns:
header

Definition at line 441 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:
hiheader tag iterator
Return values:
*tagtag
*typetag value data type
*ptag value(s)
*cnumber of values
Returns:
1 on success, 0 on failure

Definition at line 804 of file header.h.

typedef Header(* HDRread)(void *_fd, enum hMagic magicp)

Read (and load) header from file handle.

Parameters:
_fdfile handle
magicpread (and verify) 8 bytes of (magic, 0)?
Returns:
header (or NULL on error)

Definition at line 553 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:
hheader (with pointers)
tagregion tag
Returns:
on-disk header (with offsets)

Definition at line 516 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:
hheader
tagtag
Returns:
0 on success, 1 on failure (INCONSISTENT)

Definition at line 745 of file header.h.

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

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

Parameters:
hheader
originnew header instance
Returns:
0 always

Definition at line 868 of file header.h.

typedef int(* HDRsetmagic)(Header h, unsigned char *magic, size_t nmagic)

Store header magic.

Parameters:
hheader
magicmagic array
nmagicno. bytes of magic
Returns:
0 always

Definition at line 830 of file header.h.

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

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

Parameters:
hheader
originnew header origin
Returns:
0 always

Definition at line 849 of file header.h.

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

Return size of on-disk header representation in bytes.

Parameters:
hheader
magicpinclude size of 8 bytes for (magic, 0)?
Returns:
size of on-disk header

Definition at line 496 of file header.h.

typedef void(* HDRsort)(Header h)

Sort tags in header.

Todo:
Eliminate from API.
Parameters:
hheader

Definition at line 477 of file header.h.

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

Return formatted output string from header tags.

The returned string must be free()d.

Parameters:
hheader
fmtformat to use
tagsarray of tag name/value pairs
extschained table of formatting extensions.
Return values:
errmsgerror message (if any)
Returns:
formatted output string (malloc'ed)

Definition at line 760 of file header.h.

typedef Header(* HDRunlink)(Header h)

Dereference a header instance.

Parameters:
hheader
Returns:
NULL always

Definition at line 468 of file header.h.

typedef void*(* HDRunload)(Header h)

Convert header to on-disk representation.

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

Definition at line 505 of file header.h.

typedef void(* HDRunsort)(Header h)

Restore tags in header to original ordering.

Todo:
Eliminate from API.
Parameters:
hheader

Definition at line 486 of file header.h.

typedef int(* HDRwrite)(void *_fd,Header h, enum hMagic magicp)

Write (with unload) header to file handle.

Parameters:
_fdfile handle
hheader
magicpprefix write with 8 bytes of (magic, 0)?
Returns:
0 on success, 1 on error

Definition at line 564 of file header.h.

typedef struct _HE_s* HE_t

Definition at line 148 of file header.h.

typedef struct headerToken_s* Header

Definition at line 106 of file header.h.

Definition at line 207 of file header.h.

Define header tag output formats.

Definition at line 281 of file header.h.

typedef char*(* headerTagFormatFunction)(HE_t he,const char **av)

HEADER_EXT_TAG format function prototype.

Parameters:
hetag container
avparameter array (or NULL)
Returns:
formatted string

Definition at line 264 of file header.h.

Associate tag names with numeric values.

Definition at line 212 of file header.h.

typedef int(* headerTagTagFunction)(Header h, HE_t he)

HEADER_EXT_FORMAT format function prototype.

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

Parameters:
hheader
hetag container
Returns:
0 on success

Definition at line 275 of file header.h.

typedef union rpmDataType_u hRET_t

Definition at line 153 of file header.h.

typedef int_32* hTAG_t

Definition at line 175 of file header.h.

typedef struct HV_s* HV_t

Header method vectors.

Definition at line 884 of file header.h.

typedef struct indexEntry_s* indexEntry

A single tag from a Header.

Definition at line 44 of file header_internal.h.

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

Tags identify data in package headers.

Note:
tags should not have value 0!
Todo:
: Somehow supply type

Definition at line 144 of file header.h.

typedef union rpmDataType_u rpmTagData

Definition at line 140 of file header.h.

Identify how to return the header data type.

typedef enum rpmTagType_e rpmTagType

Definition at line 136 of file header.h.

typedef struct sprintfTag_s* sprintfTag

Definition at line 84 of file header_internal.h.

typedef struct sprintfToken_s* sprintfToken

Definition at line 105 of file header_internal.h.


Enumeration Type Documentation

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 251 of file header.h.

enum hMagic

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

Enumerator:
HEADER_MAGIC_NO 
HEADER_MAGIC_YES 

Definition at line 308 of file header.h.

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 322 of file header.h.

enum rpmTag_e

Tags identify data in package headers.

Note:
tags should not have value 0!
Todo:
: Somehow supply type
Enumerator:
RPMTAG_HEADERIMAGE 

Current image.

RPMTAG_HEADERSIGNATURES 

Signatures.

RPMTAG_HEADERIMMUTABLE 

x Original image.

RPMTAG_HEADERREGIONS 

Regions.

RPMTAG_HEADERI18NTABLE 

s[] I18N string locales.

RPMTAG_SIG_BASE 
RPMTAG_SIGSIZE 
RPMTAG_SIGLEMD5_1 
RPMTAG_SIGPGP 
RPMTAG_SIGLEMD5_2 
RPMTAG_SIGMD5 

Definition at line 181 of file rpmlib.h.

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 337 of file header.h.

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 111 of file header.h.


Function Documentation

static int copyEntry ( const indexEntry  entry,
rpmTagType type,
rpmTagData p,
rpmTagCount c,
int  minMem 
) [static]

Retrieve data from header entry.

Todo:
Permit retrieval of regions other than HEADER_IMUTABLE.
Parameters:
entryheader entry
Return values:
*typetype (or NULL)
*pdata (or NULL)
*ccount (or NULL)
Parameters:
minMemstring pointers refer to header memory?
Returns:
1 on success, otherwise error.

Definition at line 1525 of file header.c.

References entryInfo_s::count, indexEntry_s::data, ENTRY_IS_REGION, HEADER_IMAGE, indexEntry_s::info, indexEntry_s::length, entryInfo_s::offset, indexEntry_s::rdlen, 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::tag, entryInfo_s::type, and xmalloc().

Referenced by headerGetRawEntry(), and intGetEntry().

static void* doHeaderUnload ( Header  h,
size_t *  lenp 
) [static]
static HV_t h2hv ( Header  h) [inline, static]
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:
hheader
tagtag
typetag value data type
ppointer to tag value(s)
cnumber 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(), initSourceHeaderScriptlet(), makeHDRSignature(), mungeFilelist(), packageBinaries(), packageSources(), parsePreamble(), parseScript(), parseSpec(), populateInstallHeader(), postPopulateInstallHeader(), 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:
hheader
tagtag
stringtag value
langlocale
Returns:
1 on success, 0 on failure

Definition at line 385 of file hdrinline.h.

References h2hv(), HV_s::hdraddi18n, and lang.

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:
hheader
tagtag
typetag value data type
ppointer to tag value(s)
cnumber of values
Returns:
1 on success, 0 on failure
Parameters:
hheader
tagtag
typetag value data type
ppointer to tag value(s)
cnumber 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(), rpm3to4(), 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:
hheader
tagtag
typetag value data type
ppointer to tag value(s)
cnumber 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:
hheader
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:
uhon-disk header blob (i.e. with offsets)
Returns:
header

Definition at line 187 of file hdrinline.h.

References HV_s::hdrcopyload.

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:
headerFromsource header
headerTodestination header
tagstocopyarray of tags that are copied

Definition at line 454 of file hdrinline.h.

References HV_s::hdrcopytags.

Referenced by packageBinaries(), and parsePreamble().

void headerDump ( Header  h,
FILE *  f,
int  flags,
const struct headerTagTableEntry_s tags 
)
static Header headerFree ( Header  h) [inline, static]
static void* headerFreeData ( const void *  data,
rpmTagType  type 
) [inline, static]
static HeaderIterator headerFreeIterator ( HeaderIterator  hi) [inline, static]

Destroy header tag iterator.

Parameters:
hiheader tag iterator
Returns:
NULL always

Definition at line 469 of file hdrinline.h.

References HV_s::hdrfreeiter.

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:
hheader
datapointer to tag value(s)
typetype of data (or -1 to force free)
Returns:
NULL always
Parameters:
hheader
datadata (or NULL)
typetype of data (or -1 to force free)
Returns:
NULL always

Definition at line 247 of file hdrinline.h.

References h2hv(), and HV_s::hdrfreetag.

Referenced by rpm3to4().

const char * headerGetBaseURL ( Header  h)

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

Parameters:
hheader
Returns:
header origin

Definition at line 1202 of file header.c.

References headerToken_s::baseurl.

Referenced by pkgbaseurlTag().

const char * headerGetDigest ( Header  h)

Return digest of origin *.rpm file.

Parameters:
hheader
Returns:
header digest

Definition at line 1232 of file header.c.

References headerToken_s::digest.

Referenced by pkgdigestTag().

uint32_t headerGetEndOff ( Header  h)

Return header ending byte offset.

Parameters:
hheader
Returns:
header ending byte offset

Definition at line 1278 of file header.c.

References headerToken_s::endoff.

Referenced by headerendoffTag().

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:
hheader
tagtag
Return values:
*typetag value data type (or NULL)
*ptag value(s) (or NULL)
*cnumber of values (or NULL)
Returns:
1 on success, 0 on failure

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:
hheader
tagtag
Return values:
*typetag value data type (or NULL)
*ppointer to tag value(s) (or NULL)
*cnumber 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 FDGsqlTag(), FDGxmlTag(), formatValue(), fssizesTag(), getSignid(), hCopyTag(), headerNEVRA(), headerNVR(), hGetNEVRA(), hLoadTID(), i18nTag(), IDTXglob(), IDTXload(), instprefixTag(), localeTag(), makeHDRSignature(), parsePreamble(), pkgbaseurlTag(), pkgoriginTag(), PRCOsqlTag(), PRCOxmlTag(), readFile(), rpm3to4(), rpmdbExportInfo(), rpmdsNew(), rpmfcFindRequiredPackages(), rpmfiNew(), rpmHeaderGetEntry(), rpmHeadersIdentical(), rpmInstall(), rpmMergeHeaders(), rpmpsmStage(), rpmReadPackageFile(), rpmReadSignature(), rpmReSign(), rpmteNew(), rpmtsFindPubkey(), rpmtsSolve(), rpmVerifySignatures(), rpmVersionCompare(), singleSprintf(), tag2uuidv1(), tag2uuidv5(), triggercondsTag(), triggertypeTag(), and writeRPM().

static int headerGetEntryMinMemory ( Header  h,
int_32  tag,
hTYP_t  type,
void *  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:
hheader
tagtag
Return values:
*typetag value data type (or NULL)
*ptag value(s) (or NULL)
*cnumber 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(), handlePreambleTag(), headerMacrosLoad(), headerMacrosUnload(), hGetColor(), isMemberInEntry(), mireSkip(), processPackageFiles(), providePackageNVR(), rpmdbAdd(), rpmdbFindByFile(), rpmdbFindFpList(), rpmdbRemove(), rpmdsNew(), rpmdsThis(), rpmfcGenerateScriptletDeps(), rpmfiBuildFNames(), rpmfiNew(), rpmteChain(), rpmtsAddInstallElement(), stashSt(), timeCheck(), and writeRPM().

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

Return header instance (if from rpmdb).

Parameters:
hheader
Returns:
header instance

Definition at line 591 of file hdrinline.h.

References HV_s::hdrgetinstance.

Referenced by dbinstanceTag(), FDGsqlTag(), PRCOsqlTag(), rpmgiNext(), rpmpsmStage(), and verifyDependencies().

char** headerGetLangs ( Header  h)

Return array of locales found in header.

The array is terminated with a NULL sentinel.

Parameters:
hheader
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:
hheader
Returns:
header origin

Definition at line 513 of file hdrinline.h.

References HV_s::hdrgetorigin.

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

int headerGetRawEntry ( Header  h,
int_32  tag,
rpmTagType type,
void *  p,
rpmTagCount c 
)

Retrieve tag value with type match.

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

Parameters:
hheader
tagtag
Return values:
*typetag value data type (or NULL)
*ppointer to tag value(s) (or NULL)
*cnumber of values (or NULL)
Returns:
1 on success, 0 on failure

Definition at line 1899 of file header.c.

References copyEntry(), findEntry(), headerIsEntry(), and RPM_NULL_TYPE.

Referenced by headerGetLangs().

uint32_t headerGetStartOff ( Header  h)

Return header starting byte offset.

Parameters:
hheader
Returns:
header starting byte offset

Definition at line 1264 of file header.c.

References headerToken_s::startoff.

Referenced by headerstartoffTag().

struct stat * headerGetStatbuf ( Header  h) [read]

Return header stat(2) buffer (of origin *.rpm file).

Parameters:
hheader
Returns:
header stat(2) buffer

Definition at line 1218 of file header.c.

References headerToken_s::sb.

Referenced by pkgmtimeTag(), pkgsizeTag(), and rpmReadHeader().

static void* headerGetStats ( Header  h,
int  opx 
) [static]

Return header stats accumulator structure.

Parameters:
hheader
opxper-header accumulator index (aka rpmtsOpX)
Returns:
per-header accumulator pointer

Definition at line 134 of file header.c.

Referenced by doHeaderUnload().

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

Create header tag iterator.

Parameters:
hheader
Returns:
header tag iterator

Definition at line 481 of file hdrinline.h.

References HV_s::hdrinititer.

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

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

Reference a header instance.

Parameters:
hheader
Returns:
new header reference
Parameters:
hheader
Returns:
referenced header instance

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:
uhon-disk header blob (i.e. with offsets)
Returns:
header

Definition at line 175 of file hdrinline.h.

References HV_s::hdrload.

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

void headerMergeLegacySigs ( Header  h,
const Header  sigh 
)
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:
hheader
tagtag
typetag value data type
ppointer to tag value(s)
cnumber 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:
hheader
Return values:
*npname pointer (or NULL)
*epepoch pointer (or NULL)
*vpversion pointer (or NULL)
*rprelease pointer (or NULL)
*aparch pointer (or NULL)
Returns:
0 always

Definition at line 162 of file hdrNVR.c.

References headerGetEntry(), and RPM_STRING_TYPE.

Referenced by hGetNVRA().

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.

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:
hiheader tag iterator
Return values:
*tagtag
*typetag value data type
*ppointer to tag value(s)
*cnumber of values
Returns:
1 on success, 0 on failure

Definition at line 497 of file hdrinline.h.

References HV_s::hdrnextiter.

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:
hheader
Return values:
*npname pointer (or NULL)
*vpversion pointer (or NULL)
*rprelease pointer (or NULL)
Returns:
0 always

Definition at line 137 of file hdrNVR.c.

References headerGetEntry(), and RPM_STRING_TYPE.

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

static Header headerRead ( void *  _fd,
enum hMagic  magicp 
) [inline, static]

Read (and load) header from file handle.

Parameters:
_fdfile handle
magicpread (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.

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:
hheader
noArchiveSizedon't copy archive size tag (pre rpm-4.1)
Returns:
regenerated signature header

Definition at line 544 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_SIGLEMD5_1, RPMTAG_SIGLEMD5_2, RPMTAG_SIGMD5, RPMTAG_SIGPGP, 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:
hheader (with pointers)
tagregion 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:
hheader
tagtag
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().

int headerSetBaseURL ( Header  h,
const char *  baseurl 
)

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

Parameters:
hheader
baseurlnew header baseurl
Returns:
0 always

Definition at line 1208 of file header.c.

References _free(), headerToken_s::baseurl, and xstrdup().

int headerSetDigest ( Header  h,
const char *  digest 
)

Store digest of origin *.rpm file.

Parameters:
hheader
stnew header digest
Returns:
0 always

Definition at line 1238 of file header.c.

References _free(), headerToken_s::digest, and xstrdup().

uint32_t headerSetEndOff ( Header  h,
uint32_t  endoff 
)

Store header ending byte offset.

Parameters:
hheader
startoffnew header ending byte offset
Returns:
0 always

Definition at line 1284 of file header.c.

References headerToken_s::endoff.

Referenced by rpmReadHeader().

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

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

Parameters:
hheader
instancenew header instance
Returns:
0 always

Definition at line 604 of file hdrinline.h.

References HV_s::hdrsetinstance.

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:
hheader
originnew header origin
Returns:
0 always

Definition at line 526 of file hdrinline.h.

References HV_s::hdrsetorigin.

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

uint32_t headerSetStartOff ( Header  h,
uint32_t  startoff 
)

Store header starting byte offset.

Parameters:
hheader
startoffnew header starting byte offset
Returns:
0 always

Definition at line 1270 of file header.c.

References headerToken_s::startoff.

Referenced by rpmReadHeader().

int headerSetStatbuf ( Header  h,
struct stat *  st 
)

Copy into header stat(2) buffer (of origin *.rpm file).

Parameters:
hheader
stnew header stat(2) buffer
Returns:
0 always

Definition at line 1224 of file header.c.

References headerToken_s::sb.

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

Return size of on-disk header representation in bytes.

Parameters:
hheader
magicpinclude 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(), rpmWriteSignature(), and writeRPM().

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

Sort tags in header.

Parameters:
hheader

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 tags,
const struct headerSprintfExtension_s exts,
errmsg_t errmsg 
) [inline, static]

Return formatted output string from header tags.

The returned string must be free()d.

Parameters:
hheader
fmtformat to use
tagsarray of tag name/value pairs
extnschained table of formatting extensions.
Return values:
errmsgerror message (if any)
Returns:
formatted output string (malloc'ed)

The returned string must be free()d.

Parameters:
hheader
fmtformat to use
tagsarray of tag name/value/type triples
extsformatting extensions chained table
Return values:
*errmsgerror 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(), parseForSimple(), printNewSpecfile(), queryHeader(), rpmcliImportPubkey(), rpmfiNew(), rpmHeaderGetEntry(), rpmpsmStage(), rpmShowProgress(), rpmtsSolve(), and runScript().

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

Dereference a header instance.

Parameters:
hheader
Returns:
new header reference
Parameters:
hheader
Returns:
NULL always

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:
hheader (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(), rpmdbAdd(), and writeRPM().

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

Restore tags in header to original ordering.

Parameters:
hheader

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:
hheader
Returns:
no. of references

Definition at line 183 of file header_internal.h.

References headerToken_s::nrefs.

static int headerWrite ( void *  _fd,
Header  h,
enum hMagic  magicp 
) [inline, static]

Write (with unload) header to file handle.

Parameters:
_fdfile handle
hheader
magicpprefix write with 8 bytes of (magic, 0)?
Returns:
0 on success, 1 on error

Definition at line 214 of file hdrinline.h.

References _fd, 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:
entryheader entry
ilno. of entries
dlstart no. bytes of data
peheader physical entry pointer (swapped)
dataStartheader data start
dataEndheader data end
regionidregion offset
Returns:
no. bytes of data in region, -1 on error

Definition at line 467 of file header.c.

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

Referenced by copyEntry(), and doHeaderUnload().


Variable Documentation

Header methods for rpm headers.

Definition at line 4161 of file header.c.

unsigned char header_magic[8] [static]
Initial value:
 {
        0x8e, 0xad, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00
}

Definition at line 41 of file header.c.

Supported default header tag output formats.

Definition at line 3025 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 95 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 49 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 72 of file header.c.

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