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

Data Structures

struct  sprintfTag_s
struct  sprintfToken_s
struct  headerSprintfArgs_s
struct  headerToken_s
 The Header data structure. More...
union  rpmDataType_u
struct  _HE_s

Files

file  formats.c
file  package.c
file  rpmlib.h
 

In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not.


file  hdrfmt.c
file  header.c
file  header_internal.c
file  header_internal.h
file  rpmtag.h

Typedefs

typedef struct sprintfTag_ssprintfTag
typedef struct sprintfToken_ssprintfToken
typedef struct
headerSprintfArgs_s
headerSprintfArgs
typedef struct entryInfo_sentryInfo
 Description of tag data.
typedef struct indexEntry_sindexEntry
 A single tag from a Header.
typedef const char * errmsg_t
typedef struct headerToken_sHeader
typedef enum rpmTagType_e rpmTagType
typedef union rpmDataType_u rpmTagData
typedef rpmuint32_t rpmTagCount
typedef struct _HE_sHE_t
typedef enum rpmSubTagType_e rpmSubTagType
typedef enum rpmTagReturnType_e rpmTagReturnType
 Identify how to return the header data type.
typedef struct headerIterator_sHeaderIterator
typedef struct headerTagIndices_s * headerTagIndices
typedef struct
headerSprintfExtension_s * 
headerSprintfExtension
typedef enum rpmTag_e rpmTag
typedef enum rpmSigTag_e rpmSigTag

Enumerations

enum  rpmTagType_e {
  RPM_UINT8_TYPE = 2, RPM_UINT16_TYPE = 3, RPM_UINT32_TYPE = 4, RPM_UINT64_TYPE = 5,
  RPM_STRING_TYPE = 6, RPM_BIN_TYPE = 7, RPM_STRING_ARRAY_TYPE = 8, RPM_I18NSTRING_TYPE = 9
}
 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 }
enum  rpmTagReturnType_e {
  RPM_ANY_RETURN_TYPE = 0, RPM_SCALAR_RETURN_TYPE = 0x00010000, RPM_ARRAY_RETURN_TYPE = 0x00020000, RPM_MAPPING_RETURN_TYPE = 0x00040000,
  RPM_PROBE_RETURN_TYPE = 0x00100000, RPM_TREE_RETURN_TYPE = 0x00200000, RPM_OPENPGP_RETURN_TYPE = 0x00400000, RPM_X509_RETURN_TYPE = 0x00800000,
  RPM_ASN1_RETURN_TYPE = 0x01000000, RPM_OPAQUE_RETURN_TYPE = 0x10000000, RPM_MASK_RETURN_TYPE = 0xffff0000
}
 Identify how to return the header data type. More...
enum  rpmTag_e {
  RPMTAG_HEADERIMAGE = 61, RPMTAG_HEADERSIGNATURES = 62, RPMTAG_HEADERIMMUTABLE = 63, RPMTAG_HEADERREGIONS = 64,
  RPMTAG_HEADERI18NTABLE = 100, RPMTAG_SIG_BASE = 256, 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...

Functions

static void headerSort (Header h)
 Sort tags in header.
static void headerUnsort (Header h)
 Restore tags in header to original ordering.
static unsigned char * tagSwab (unsigned char *t, const HE_t he, size_t nb)
 Swab rpmuint64_t/rpmuint32_t/rpmuint16_t arrays within header region.
static rpmuint32_t regionSwab (indexEntry entry, rpmuint32_t il, rpmuint32_t dl, entryInfo pe, unsigned char *dataStart, const unsigned char *dataEnd, rpmint32_t regionid)
 Swab rpmuint64_t/rpmuint32_t/rpmuint16_t arrays within header region.
static int headerRemoveEntry (Header h, rpmTag tag)
 Delete tag in header.
static int copyEntry (const indexEntry entry, HE_t he, int minMem)
 Retrieve data from header entry.
static int headerAddEntry (Header h, HE_t he)
 Add tag to header.
static int headerAppendEntry (Header h, HE_t he)
 Append element to tag array in header.
static int headerAddOrAppendEntry (Header h, HE_t he)
 Add or append element to tag array in header.
static int headerModifyEntry (Header h, HE_t he)
 Modify tag in header.
static int headerUsageCount (Header h)
 Return header reference count.
static rpmRC rpmWriteHeader (FD_t fd, Header h, const char **msg)
 Write (with unload) header to file handle.
char * headerSprintf (Header h, const char *fmt, headerTagTableEntry tags, headerSprintfExtension exts, errmsg_t *errmsg)
 Return formatted output string from header tags.
int headerGet (Header h, HE_t he, unsigned int flags)
 Retrieve extension or tag value from a header.
int headerPut (Header h, HE_t he, unsigned int flags)
 Add or append tag container to header.
int headerDel (Header h, HE_t he, unsigned int flags)
 Remove tag container from header.
int headerMod (Header h, HE_t he, unsigned int flags)
 Modify tag container in header.
HeaderIterator headerFini (HeaderIterator hi)
 Destroy header tag container iterator.
HeaderIterator headerInit (Header h)
 Create header tag iterator.
int headerNext (HeaderIterator hi, HE_t he, unsigned int flags)
 Return next tag from header.
Header headerLink (Header h)
 Reference a header instance.
Header headerUnlink (Header h)
 Dereference a header instance.
Header headerFree (Header h)
 Dereference a header instance.
Header headerNew (void)
 Create new (empty) header instance.
size_t headerSizeof (Header h)
 Return size of on-disk header representation in bytes.
void * headerUnload (Header h, size_t *lenp)
 headerUnload.
Header headerReload (Header h, int tag)
 Convert header to on-disk representation, and then reload.
Header headerCopy (Header h)
 Duplicate a header.
Header headerLoad (void *uh)
 Convert header to in-memory representation.
Header headerCopyLoad (const void *uh)
 Make a copy and convert header to in-memory representation.
int headerIsEntry (Header h, rpmTag tag)
 Check if tag is in header.
int headerAddI18NString (Header h, rpmTag tag, const char *string, const char *lang)
 Add locale specific tag to header.
void headerCopyTags (Header headerFrom, Header headerTo, rpmTag *tagstocopy)
 Duplicate tag values from one header into another.
int headerGetMagic (Header h, unsigned char **magicp, size_t *nmagicp)
 Return header magic.
int headerSetMagic (Header h, unsigned char *magic, size_t nmagic)
 Store header magic.
const char * headerGetOrigin (Header h)
 Return header origin (e.g path or URL).
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.
void * headerGetRpmdb (Header h)
 Return rpmdb pointer.
void * headerSetRpmdb (Header h, void *rpmdb)
 Store rpmdb pointer.
rpmuint32_t headerGetInstance (Header h)
 Return header instance (if from rpmdb).
rpmuint32_t headerSetInstance (Header h, rpmuint32_t instance)
 Store header instance (e.g path or URL).
rpmuint32_t headerGetStartOff (Header h)
 Return header starting byte offset.
rpmuint32_t headerSetStartOff (Header h, rpmuint32_t startoff)
 Store header starting byte offset.
rpmuint32_t headerGetEndOff (Header h)
 Return header ending byte offset.
rpmuint32_t headerSetEndOff (Header h, rpmuint32_t endoff)
 Store header ending byte offset.
void * headerGetStats (Header h, int opx)
 Return header stats accumulator structure.
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.
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.

Variables

static unsigned char header_magic [8]
static int typeSizes [16]
 Size of header data types.
static size_t headerMaxbytes = (1024*1024*1024)
 Maximum no.
headerSprintfExtension headerDefaultFormats
 Supported default header tag output formats.
headerSprintfExtension headerCompoundFormats
 Supported default header extension/tag output formats.

Typedef Documentation

typedef struct entryInfo_s* entryInfo

Description of tag data.

Definition at line 55 of file header_internal.h.

typedef const char* errmsg_t

Definition at line 17 of file rpmtag.h.

typedef struct _HE_s* HE_t

tag container.

Definition at line 58 of file rpmtag.h.

typedef struct headerToken_s* Header

Definition at line 21 of file rpmtag.h.

Definition at line 125 of file rpmtag.h.

Definition at line 4990 of file hdrfmt.c.

typedef struct headerSprintfExtension_s* headerSprintfExtension

Definition at line 133 of file rpmtag.h.

typedef struct headerTagIndices_s* headerTagIndices

Definition at line 129 of file rpmtag.h.

typedef struct indexEntry_s* indexEntry

A single tag from a Header.

Definition at line 73 of file header_internal.h.

typedef enum rpmSigTag_e rpmSigTag

Definition at line 478 of file rpmtag.h.

typedef enum rpmTag_e rpmTag

Definition at line 474 of file rpmtag.h.

tag data element count.

Definition at line 54 of file rpmtag.h.

typedef union rpmDataType_u rpmTagData

tag data.

Definition at line 50 of file rpmtag.h.

Identify how to return the header data type.

typedef enum rpmTagType_e rpmTagType

tag data type.

Definition at line 46 of file rpmtag.h.

typedef struct sprintfTag_s* sprintfTag

Definition at line 4926 of file hdrfmt.c.

typedef struct sprintfToken_s* sprintfToken

Definition at line 4952 of file hdrfmt.c.


Enumeration Type Documentation

Enumerator:
RPM_REGION_TYPE 
RPM_BIN_ARRAY_TYPE 
RPM_XREF_TYPE 

Definition at line 84 of file rpmtag.h.

enum rpmTag_e

Tags identify data in package headers.

Note:
tags should not have value 0!
Enumerator:
RPMTAG_HEADERIMAGE 

internal Current image.

RPMTAG_HEADERSIGNATURES 

internal Signatures.

RPMTAG_HEADERIMMUTABLE 

x Original image.

RPMTAG_HEADERREGIONS 

internal 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 152 of file rpmtag.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_PROBE_RETURN_TYPE 
RPM_TREE_RETURN_TYPE 
RPM_OPENPGP_RETURN_TYPE 
RPM_X509_RETURN_TYPE 
RPM_ASN1_RETURN_TYPE 
RPM_OPAQUE_RETURN_TYPE 
RPM_MASK_RETURN_TYPE 

Definition at line 95 of file rpmtag.h.

The basic types of data in tags from headers.

Enumerator:
RPM_UINT8_TYPE 
RPM_UINT16_TYPE 
RPM_UINT32_TYPE 
RPM_UINT64_TYPE 
RPM_STRING_TYPE 
RPM_BIN_TYPE 
RPM_STRING_ARRAY_TYPE 
RPM_I18NSTRING_TYPE 

Definition at line 26 of file rpmtag.h.


Function Documentation

static int copyEntry ( const indexEntry  entry,
HE_t  he,
int  minMem 
) [static]

Retrieve data from header entry.

Todo:
Permit retrieval of regions other than HEADER_IMUTABLE.
Parameters:
entryheader entry
Return values:
*hetag container
Parameters:
minMemstring pointers refer to header memory?
Returns:
1 on success, otherwise error.

Definition at line 1383 of file header.c.

References rpmDataType_u::argv, _HE_s::c, entryInfo_s::count, indexEntry_s::data, ENTRY_IS_REGION, HEADER_IMAGE, indexEntry_s::info, indexEntry_s::length, entryInfo_s::offset, _HE_s::p, rpmDataType_u::ptr, indexEntry_s::rdlen, REGION_TAG_COUNT, RPM_BIN_TYPE, RPM_I18NSTRING_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, rpmDataType_u::str, _HE_s::t, entryInfo_s::tag, entryInfo_s::type, rpmDataType_u::ui32p, and xmalloc().

Referenced by headerNext(), and intGetEntry().

static int headerAddEntry ( Header  h,
HE_t  he 
) [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
hetag container
Returns:
1 on success, 0 on failure

< Are header entries sorted?

Definition at line 1729 of file header.c.

References _HE_s::c, entryInfo_s::count, indexEntry_s::data, headerToken_s::flags, grabData(), hdrchkData, hdrchkType, HEADERFLAG_SORTED, headerToken_s::index, INDEX_MALLOC_SIZE, headerToken_s::indexAlloced, headerToken_s::indexUsed, indexEntry_s::info, indexEntry_s::length, entryInfo_s::offset, rpmDataType_u::ptr, _HE_s::t, entryInfo_s::tag, _HE_s::tag, entryInfo_s::type, and xrealloc().

Referenced by headerAddI18NString(), headerAddOrAppendEntry(), headerCopy(), and headerPut().

int headerAddI18NString ( Header  h,
rpmTag  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 1840 of file header.c.

References _free(), alloca(), rpmDataType_u::argv, _HE_s::c, entryInfo_s::count, indexEntry_s::data, ENTRY_IN_REGION, findEntry(), HEADER_I18NTABLE, headerAddEntry(), indexEntry_s::info, lang, indexEntry_s::length, entryInfo_s::offset, _HE_s::p, rpmDataType_u::ptr, RPM_I18NSTRING_TYPE, RPM_STRING_ARRAY_TYPE, _HE_s::t, _HE_s::tag, xmalloc(), and xrealloc().

Referenced by handlePreambleTag(), parseDescription(), and rpmcliImportPubkey().

static int headerAddOrAppendEntry ( Header  h,
HE_t  he 
) [static]

Add or append element to tag array in header.

Parameters:
hheader
hetag container
Returns:
1 on success, 0 on failure

Definition at line 1832 of file header.c.

References findEntry(), headerAddEntry(), headerAppendEntry(), _HE_s::t, and _HE_s::tag.

Referenced by headerPut().

static int headerAppendEntry ( Header  h,
HE_t  he 
) [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.

Parameters:
hheader
hetag container
Returns:
1 on success, 0 on failure

Definition at line 1783 of file header.c.

References _HE_s::c, copyData(), entryInfo_s::count, indexEntry_s::data, dataLength(), ENTRY_IN_REGION, findEntry(), indexEntry_s::info, indexEntry_s::length, entryInfo_s::offset, _HE_s::p, rpmDataType_u::ptr, RPM_I18NSTRING_TYPE, RPM_STRING_TYPE, _HE_s::t, _HE_s::tag, xmalloc(), and xrealloc().

Referenced by headerAddOrAppendEntry().

Header headerCopy ( Header  h)

Duplicate a header.

Parameters:
hheader
Returns:
new header instance

Definition at line 2101 of file header.c.

References _free(), alloca(), HEADER_IMAGE, headerAddEntry(), headerFini(), headerInit(), headerNew(), headerNext(), headerReload(), _HE_s::p, and rpmDataType_u::ptr.

Referenced by hdrUnload(), and rpmdbRebuild().

Header headerCopyLoad ( 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 1362 of file header.c.

References headerMap().

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

void headerCopyTags ( Header  headerFrom,
Header  headerTo,
rpmTag tagstocopy 
)

Duplicate tag values from one header into another.

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

Definition at line 2118 of file header.c.

References _free(), alloca(), headerGet(), headerIsEntry(), headerPut(), _HE_s::p, rpmDataType_u::ptr, and _HE_s::tag.

Referenced by packageBinaries(), and parsePreamble().

int headerDel ( Header  h,
HE_t  he,
unsigned int  flags 
)

Remove tag container from header.

Parameters:
hheader
hetag container
flags(unused)
Returns:
1 on success, 0 on failure

Definition at line 2220 of file header.c.

References headerRemoveEntry(), and _HE_s::tag.

Referenced by addFileToTag(), compressFilelist(), parseDescription(), rpmdbAdd(), rpmfcGenerateDepends(), and rpmReSign().

HeaderIterator headerFini ( HeaderIterator  hi)

Destroy header tag container iterator.

Parameters:
hiheader tag container iterator
Returns:
NULL always

Definition at line 2041 of file header.c.

References _free(), headerIterator_s::h, and headerFree().

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

Header headerFree ( Header  h)
int headerGet ( Header  h,
HE_t  he,
unsigned int  flags 
)

Retrieve extension or tag value from a header.

Parameters:
hheader
hetag container
flagstag retrieval flags
Returns:
1 on success, 0 on failure

Definition at line 2138 of file header.c.

References _hdr_debug, _HE_s::c, _HE_s::freeData, headerCompoundFormats, HEADERGET_NOEXTENSION, headerGetStats(), intGetEntry(), name, _HE_s::p, rpmDataType_u::ptr, rpmheRealloc(), rpmswEnter(), rpmswExit(), _HE_s::t, _HE_s::tag, tagName(), and xstrcasecmp().

Referenced by addFileToTag(), addReqProv(), addTE(), checkPackageSet(), compressFilelist(), debevrTag(), debmd5sumsTag(), ensureOlder(), FDGsqlTag(), FDGxmlTag(), FDGyamlTag(), fiIntersect(), findErases(), formatValue(), fssizesTag(), ftsCacheUpdate(), getSignid(), handleInstInstalledFiles(), handleOneTrigger(), handlePreambleTag(), handleRmvdInstalledFiles(), hCopyTag(), hdr_subscript(), headerCopyTags(), headerMacrosLoad(), headerMacrosUnload(), headerNEVRA(), hGetColor(), hLoadTID(), i18nTag(), IDTXglob(), IDTXload(), instprefixTag(), isMemberInEntry(), localeTag(), lookupPackage(), main(), makeHDRSignature(), markReplacedFiles(), mireSkip(), needswhatTag(), nwlookupTag(), packageBinaries(), parseDescription(), parsePreamble(), parseSpec(), pkgbaseurlTag(), pkgoriginTag(), pkgUnpackagedSubdirs(), PRCOsqlTag(), PRCOxmlTag(), PRCOyamlTag(), printNewSpecfile(), processBinaryFiles(), processPackageFiles(), providePackageNVR(), rdSignature(), readFile(), relocateFileList(), rpmcliInstall(), rpmdbAdd(), rpmdbExportInfo(), rpmdbFindByFile(), rpmdbFindFpList(), rpmdbRemove(), rpmdsNew(), rpmdsThis(), rpmfcGenerateScriptletDeps(), rpmfiBuildFNames(), rpmfiNew(), rpmHeadersIdentical(), rpmInstallSourcePackage(), rpmpsmStage(), rpmReadPackageFile(), rpmReSign(), rpmteChain(), rpmteNew(), rpmtsAddInstallElement(), rpmtsAddUpgrades(), rpmtsCallback(), rpmtsEraseDebuginfo(), rpmtsFindPubkey(), rpmtsSolve(), rpmVerifySignatures(), rpmVersionCompare(), runImmedTriggers(), runInstScript(), runScript(), singleSprintf(), stashSt(), tag2uuidv1(), tag2uuidv5(), timeCheck(), triggercondsTag(), triggertypeTag(), whatneedsTag(), wnlookupTag(), and writeRPM().

const char* headerGetBaseURL ( Header  h)

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

Parameters:
hheader
Returns:
header origin

Definition at line 1161 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 1191 of file header.c.

References headerToken_s::digest.

Referenced by pkgdigestTag(), and populateInstallHeader().

rpmuint32_t headerGetEndOff ( Header  h)

Return header ending byte offset.

Parameters:
hheader
Returns:
header ending byte offset

Definition at line 1247 of file header.c.

References headerToken_s::endoff.

Referenced by headerendoffTag().

rpmuint32_t headerGetInstance ( Header  h)

Return header instance (if from rpmdb).

Parameters:
hheader
Returns:
header instance

Definition at line 1223 of file header.c.

References headerToken_s::instance.

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

int headerGetMagic ( 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 1125 of file header.c.

References header_magic, and headerToken_s::magic.

Referenced by headerCheck(), makeHDRSignature(), rdSignature(), readFile(), rpmReadHeader(), rpmReadPackageFile(), and rpmWriteHeader().

const char* headerGetOrigin ( Header  h)

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

Parameters:
hheader
Returns:
header origin

Definition at line 1147 of file header.c.

References headerToken_s::origin.

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

void* headerGetRpmdb ( Header  h)

Return rpmdb pointer.

Parameters:
hheader
Returns:
rpmdb pointer

Definition at line 1207 of file header.c.

References headerToken_s::rpmdb.

Referenced by nwlookupTag(), and wnlookupTag().

rpmuint32_t headerGetStartOff ( Header  h)

Return header starting byte offset.

Parameters:
hheader
Returns:
header starting byte offset

Definition at line 1235 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 1177 of file header.c.

References headerToken_s::sb.

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

void* headerGetStats ( Header  h,
int  opx 
)

Return header stats accumulator structure.

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

Definition at line 86 of file header.c.

References _hdr_stats, headerToken_s::h_getops, and headerToken_s::h_loadops.

Referenced by headerGet(), headerLoad(), headerNext(), headerScrub(), and headerUnload().

HeaderIterator headerInit ( Header  h)

Create header tag iterator.

Parameters:
hheader
Returns:
header tag iterator

Definition at line 2051 of file header.c.

References headerIterator_s::h, headerLink(), headerSort(), headerIterator_s::next_index, and xmalloc().

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

int headerIsEntry ( Header  h,
rpmTag  tag 
)
Header headerLink ( Header  h)
Header headerLoad ( void *  uh)
void headerMergeLegacySigs ( Header  h,
const Header  sigh 
)
int headerMod ( Header  h,
HE_t  he,
unsigned int  flags 
)

Modify tag container in header.

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

Parameters:
hheader
hetag container
flags(unused)
Returns:
1 on success, 0 on failure

Definition at line 2226 of file header.c.

References headerModifyEntry().

Referenced by relocateFileList().

static int headerModifyEntry ( Header  h,
HE_t  he 
) [static]

Modify tag in header.

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

Parameters:
hheader
hetag container
Returns:
1 on success, 0 on failure

Definition at line 1995 of file header.c.

References _free(), _HE_s::c, entryInfo_s::count, indexEntry_s::data, ENTRY_IN_REGION, findEntry(), grabData(), headerToken_s::index, indexEntry_s::info, indexEntry_s::length, entryInfo_s::offset, rpmDataType_u::ptr, _HE_s::t, entryInfo_s::tag, _HE_s::tag, and entryInfo_s::type.

Referenced by headerMod().

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 156 of file hdrNVR.c.

References _free(), alloca(), _HE_s::c, headerGet(), headerIsEntry(), _HE_s::p, rpmDataType_u::ptr, RPM_STRING_TYPE, rpmDataType_u::str, _HE_s::t, _HE_s::tag, and xstrdup().

Referenced by doSetupMacro(), genSourceRpmName(), hGetNVRA(), providePackageNVR(), rpmdbRebuild(), rpmdsThis(), and writeRPM().

Header headerNew ( void  )
int headerNext ( HeaderIterator  hi,
HE_t  he,
unsigned int  flags 
)
int headerPut ( Header  h,
HE_t  he,
unsigned int  flags 
)
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 303 of file hdrNVR.c.

References _free(), alloca(), HEADER_SIGBASE, HEADER_TAGBASE, headerFini(), headerInit(), headerIsEntry(), headerNew(), headerNext(), headerPut(), _HE_s::p, rpmDataType_u::ptr, RPMSIGTAG_MD5, RPMSIGTAG_PAYLOADSIZE, RPMSIGTAG_SIZE, RPMTAG_SIGMD5, RPMTAG_SIGSIZE, and _HE_s::tag.

Referenced by rpmpsmStage().

Header headerReload ( Header  h,
int  tag 
)

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

This is used to insure that all header data is in a single contiguous memory allocation.

Parameters:
hheader (with pointers)
tagregion tag
Returns:
on-disk header (with offsets)

< Is 1st header region allocated?

Definition at line 1259 of file header.c.

References _free(), headerToken_s::baseurl, headerToken_s::digest, ENTRY_IS_REGION, headerToken_s::flags, HEADER_IMMUTABLE, HEADER_SIGNATURES, HEADERFLAG_ALLOCATED, headerFree(), headerLoad(), headerSetBaseURL(), headerSetDigest(), headerSetInstance(), headerSetOrigin(), headerSetRpmdb(), headerUnload(), headerToken_s::index, indexEntry_s::info, headerToken_s::instance, headerToken_s::origin, headerToken_s::rpmdb, headerToken_s::sb, entryInfo_s::tag, and xstrdup().

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

static int headerRemoveEntry ( Header  h,
rpmTag  tag 
) [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 902 of file header.c.

References _free(), indexEntry_s::data, ENTRY_IN_REGION, findEntry(), headerToken_s::index, headerToken_s::indexUsed, indexEntry_s::info, indexEntry_s::length, and entryInfo_s::tag.

Referenced by headerDel(), and headerLoad().

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 1168 of file header.c.

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

Referenced by headerReload(), and repoReadHeader().

int headerSetDigest ( Header  h,
const char *  digest 
)

Store digest of origin *.rpm file.

Parameters:
hheader
stnew header digest
Returns:
0 always

Definition at line 1198 of file header.c.

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

Referenced by headerReload(), and repoReadHeader().

rpmuint32_t headerSetEndOff ( Header  h,
rpmuint32_t  endoff 
)

Store header ending byte offset.

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

Definition at line 1252 of file header.c.

References headerToken_s::endoff.

Referenced by rdSignature(), and rpmReadHeader().

rpmuint32_t headerSetInstance ( Header  h,
rpmuint32_t  instance 
)

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

Parameters:
hheader
instancenew header instance
Returns:
0 always

Definition at line 1228 of file header.c.

References headerToken_s::instance.

Referenced by headerReload(), repoWriteMetadataDocs(), rpmdbAdd(), rpmmiNext(), and rpmpsmStage().

int headerSetMagic ( 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 1135 of file header.c.

References headerToken_s::magic.

int headerSetOrigin ( Header  h,
const char *  origin 
)

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

Parameters:
hheader
originnew header origin
Returns:
0 always

Definition at line 1152 of file header.c.

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

Referenced by hdrSetOrigin(), headerReload(), rpmmiNext(), and rpmReadHeader().

void* headerSetRpmdb ( Header  h,
void *  rpmdb 
)

Store rpmdb pointer.

Parameters:
hheader
rpmdbnew rpmdb pointer (or NULL to unset)
Returns:
NULL always

Definition at line 1214 of file header.c.

References headerToken_s::rpmdb.

Referenced by headerReload(), and showQueryPackage().

rpmuint32_t headerSetStartOff ( Header  h,
rpmuint32_t  startoff 
)

Store header starting byte offset.

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

Definition at line 1240 of file header.c.

References headerToken_s::startoff.

Referenced by rdSignature(), and 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 1184 of file header.c.

References headerToken_s::sb.

size_t headerSizeof ( Header  h)

Return size of on-disk header representation in bytes.

Parameters:
hheader
Returns:
size of on-disk header

< Header came from legacy source?

Definition at line 250 of file header.c.

References entryInfo_s::count, ENTRY_IS_REGION, headerToken_s::flags, header_magic, HEADERFLAG_LEGACY, headerSort(), headerToken_s::index, indexEntry_s::info, indexEntry_s::length, entryInfo_s::offset, entryInfo_s::type, and typeSizes.

Referenced by rdSignature(), readFile(), and wrSignature().

static void headerSort ( Header  h) [static]

Sort tags in header.

Parameters:
hheader

< Are header entries sorted?

< Are header entries sorted?

Definition at line 211 of file header.c.

References headerToken_s::flags, HEADERFLAG_SORTED, headerToken_s::index, indexCmp(), and headerToken_s::indexUsed.

Referenced by findEntry(), headerInit(), headerLoad(), headerSizeof(), and headerUnload().

char* headerSprintf ( Header  h,
const char *  fmt,
headerTagTableEntry  tags,
headerSprintfExtension  exts,
errmsg_t errmsg 
)
Header headerUnlink ( Header  h)

Dereference a header instance.

Parameters:
hheader
Returns:
NULL on last dereference
void* headerUnload ( Header  h,
size_t *  lenp 
)

headerUnload.

Parameters:
hheader
Return values:
*lenpno. bytes in unloaded header blob
Returns:
unloaded header blob (NULL on error)

< Header came from legacy source?

< Header came from legacy source?

< Are header entries sorted?

Definition at line 618 of file header.c.

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

Referenced by hdrUnload(), headerReload(), miFreeHeader(), rpmdbAdd(), rpmWriteHeader(), and writeRPM().

static void headerUnsort ( Header  h) [static]

Restore tags in header to original ordering.

Parameters:
hheader

Definition at line 244 of file header.c.

References headerToken_s::index, headerToken_s::indexUsed, and offsetCmp().

Referenced by headerUnload().

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

Return header reference count.

Parameters:
hheader
Returns:
no. of references

Definition at line 146 of file header_internal.h.

References headerToken_s::_item, and rpmioItem_s::use.

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

Swab rpmuint64_t/rpmuint32_t/rpmuint16_t 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, 0 on error

Definition at line 496 of file header.c.

References alloca(), 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, entryInfo_s::tag, entryInfo_s::type, typeSizes, and rpmDataType_u::ui8p.

Referenced by headerLoad().

static rpmRC rpmWriteHeader ( FD_t  fd,
Header  h,
const char **  msg 
) [static]

Write (with unload) header to file handle.

Parameters:
fdfile handle
hheader
Return values:
*msgfailure msg
Returns:
RPMRC_OK on success

Definition at line 70 of file pkgio.c.

References _, _free(), _pkgio_debug, Ferror(), Fstrerror(), Fwrite(), headerGetMagic(), headerUnload(), RPMRC_FAIL, RPMRC_OK, and xstrdup().

Referenced by wrHeader(), and wrSignature().

static unsigned char* tagSwab ( unsigned char *  t,
const HE_t  he,
size_t  nb 
) [static]

Swab rpmuint64_t/rpmuint32_t/rpmuint16_t arrays within header region.

Definition at line 370 of file header.c.

References _HE_s::c, _HE_s::p, rpmDataType_u::ptr, RPM_UINT16_TYPE, RPM_UINT32_TYPE, RPM_UINT64_TYPE, _HE_s::t, rpmDataType_u::ui16p, and rpmDataType_u::ui32p.

Referenced by copyData(), and rpmheRealloc().


Variable Documentation

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

Definition at line 35 of file header.c.

Referenced by headerGetMagic(), headerLoad(), headerNew(), and headerSizeof().

Supported default header extension/tag output formats.

Definition at line 4849 of file hdrfmt.c.

Referenced by headerGet(), headerSprintf(), queryHeader(), and rpmDisplayQueryTags().

Supported default header tag output formats.

Definition at line 322 of file hdrfmt.c.

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

Maximum no.

of bytes permitted in a header.

Definition at line 67 of file header.c.

Referenced by headerMap().

int typeSizes[16] [static]
Initial value:
  { 
    0,  
    1,  
    1,  
    2,  
    4,  
    8,  
    -1, 
    1,  
    -1, 
    -1, 
    0,  
    0,  
    0,
    0,
    0,
    0
}

Size of header data types.

Definition at line 44 of file header.c.

Referenced by dataLength(), headerSizeof(), headerUnload(), and regionSwab().