rpm  5.4.10
Data Structures | Macros | Functions | Variables
header.c File Reference
#include "system.h"
#include <rpmiotypes.h>
#include <rpmio.h>
#include <header_internal.h>
#include "debug.h"
Include dependency graph for header.c:

Go to the source code of this file.

Data Structures

struct  headerIterator_s
 Header tag iterator data structure. More...
 

Macros

#define _RPMTAG_INTERNAL
 

Functions

void * headerGetStats (Header h, int opx)
 Return header stats accumulator structure. More...
 
static void headerScrub (void *_h)
 
static Header headerGetPool (rpmioPool pool)
 
Header headerNew (void)
 Create new (empty) header instance. More...
 
static int indexCmp (const void *avp, const void *bvp)
 
static void headerSort (Header h)
 Sort tags in header. More...
 
static int offsetCmp (const void *avp, const void *bvp)
 
static void headerUnsort (Header h)
 Restore tags in header to original ordering. More...
 
size_t headerSizeof (Header h)
 Return size of on-disk header representation in bytes. More...
 
static size_t dataLength (rpmTagType type, rpmTagData *p, rpmTagCount count, int onDisk, rpmTagData *pend)
 Return length of entry data. More...
 
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. More...
 
static int rpmheRealloc (HE_t he)
 Always realloc HE_t memory. More...
 
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. More...
 
void * headerUnload (Header h, size_t *lenp)
 headerUnload. More...
 
static indexEntry findEntry (Header h, rpmTag tag, rpmTagType type)
 Find matching (tag,type) entry in header. More...
 
static int headerRemoveEntry (Header h, rpmTag tag)
 Delete tag in header. More...
 
Header headerLoad (void *uh)
 Convert header to in-memory representation. More...
 
int headerGetMagic (Header h, unsigned char **magicp, size_t *nmagicp)
 Return header magic. More...
 
int headerSetMagic (Header h, unsigned char *magic, size_t nmagic)
 Store header magic. More...
 
const char * headerGetOrigin (Header h)
 Return header origin (e.g path or URL). More...
 
int headerSetOrigin (Header h, const char *origin)
 Store header origin (e.g path or URL). More...
 
const char * headerGetParent (Header h)
 Return header parent identifier (e.g parent's NVRA). More...
 
int headerSetParent (Header h, const char *parent)
 Store header parent (e.g parent's NVRA). More...
 
const char * headerGetBaseURL (Header h)
 Return header base URL (e.g path or URL). More...
 
int headerSetBaseURL (Header h, const char *baseurl)
 Store header base URL (e.g path or URL). More...
 
struct stat * headerGetStatbuf (Header h)
 Return header stat(2) buffer (of origin *.rpm file). More...
 
int headerSetStatbuf (Header h, struct stat *st)
 Copy into header stat(2) buffer (of origin *.rpm file). More...
 
const char * headerGetDigest (Header h)
 Return digest of origin *.rpm file. More...
 
int headerSetDigest (Header h, const char *digest)
 Store digest of origin *.rpm file. More...
 
void * headerGetRpmdb (Header h)
 Return rpmdb pointer. More...
 
void * headerSetRpmdb (Header h, void *rpmdb)
 Store rpmdb pointer. More...
 
uint32_t headerGetInstance (Header h)
 Return header instance (if from rpmdb). More...
 
uint32_t headerSetInstance (Header h, uint32_t instance)
 Store header instance (e.g path or URL). More...
 
rpmuint32_t headerGetStartOff (Header h)
 Return header starting byte offset. More...
 
rpmuint32_t headerSetStartOff (Header h, rpmuint32_t startoff)
 Store header starting byte offset. More...
 
rpmuint32_t headerGetEndOff (Header h)
 Return header ending byte offset. More...
 
rpmuint32_t headerSetEndOff (Header h, rpmuint32_t endoff)
 Store header ending byte offset. More...
 
Header headerReload (Header h, rpmTag tag)
 Convert header to on-disk representation, and then reload. More...
 
static Header headerMap (const void *uh, int map)
 
Header headerCopyLoad (const void *uh)
 Make a copy and convert header to in-memory representation. More...
 
int headerIsEntry (Header h, rpmTag tag)
 Check if tag is in header. More...
 
static int copyEntry (const indexEntry entry, HE_t he, int minMem)
 Retrieve data from header entry. More...
 
static int intGetEntry (Header h, HE_t he, int flags)
 Retrieve tag data from header. More...
 
static int copyData (char *t, const HE_t he, size_t nb)
 Copy (swab'd) data into store. More...
 
static void * grabData (HE_t he, size_t *lenp)
 Return (malloc'ed) copy of (swab'd) entry data. More...
 
static int headerAddEntry (Header h, HE_t he)
 Add tag to header. More...
 
static int headerAppendEntry (Header h, HE_t he)
 Append element to tag array in header. More...
 
static int headerAddOrAppendEntry (Header h, HE_t he)
 Add or append element to tag array in header. More...
 
static int headerModifyEntry (Header h, HE_t he)
 Modify tag in header. More...
 
HeaderIterator headerFini (HeaderIterator hi)
 Destroy header tag container iterator. More...
 
HeaderIterator headerInit (Header h)
 Create header tag iterator. More...
 
int headerNext (HeaderIterator hi, HE_t he, unsigned int flags)
 Return next tag from header. More...
 
Header headerCopy (Header h)
 Duplicate a header. More...
 
void headerCopyTags (Header headerFrom, Header headerTo, rpmTag *tagstocopy)
 Duplicate tag values from one header into another. More...
 
int headerGet (Header h, HE_t he, unsigned int flags)
 Retrieve extension or tag value from a header. More...
 
int headerPut (Header h, HE_t he, unsigned int flags)
 Add or append tag container to header. More...
 
int headerDel (Header h, HE_t he, unsigned int flags)
 Remove tag container from header. More...
 
int headerMod (Header h, HE_t he, unsigned int flags)
 Modify tag container in header. More...
 

Variables

int _hdr_debug = 0
 
static unsigned char header_magic [8]
 
static int typeSizes [16]
 Size of header data types. More...
 
static size_t headerMaxbytes = (1024*1024*1024)
 Maximum no. More...
 
int _hdr_stats = 0
 Global header stats enabler. More...
 
static struct rpmop_s hdr_loadops
 
rpmop _hdr_loadops = &hdr_loadops
 
static struct rpmop_s hdr_getops
 
rpmop _hdr_getops = &hdr_getops
 
rpmioPool _headerPool
 

Macro Definition Documentation

§ _RPMTAG_INTERNAL

#define _RPMTAG_INTERNAL

Definition at line 15 of file header.c.

Function Documentation

§ copyData()

static int copyData ( char *  t,
const HE_t  he,
size_t  nb 
)
static

Copy (swab'd) data into store.

Parameters
tdata store
hetag container
nbno. bytes in store
Returns
0 on success

Definition at line 1737 of file header.c.

References rpmDataType_u::argv, _HE_s::c, _HE_s::p, RPM_I18NSTRING_TYPE, RPM_STRING_ARRAY_TYPE, _HE_s::t, and tagSwab().

Referenced by grabData(), and headerAppendEntry().

§ copyEntry()

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

References alloca(), rpmDataType_u::argv, _HE_s::c, entryInfo_s::count, indexEntry_s::data, DRD_xmalloc, ENTRY_IS_REGION, findEntry(), getenv(), HEADER_I18NTABLE, HEADER_IMAGE, indexEntry_s::info, lang, 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, and rpmDataType_u::ui32p.

Referenced by headerNext(), and intGetEntry().

§ dataLength()

static size_t dataLength ( rpmTagType  type,
rpmTagData p,
rpmTagCount  count,
int  onDisk,
rpmTagData pend 
)
static

Return length of entry data.

Parameters
typeentry data type
*ptag container data
countentry item count
onDiskdata is concatenated strings (with NUL's))?
*pendpointer to end of tag container data (or NULL)
Returns
no. bytes in data, 0 on failure

Definition at line 330 of file header.c.

References RPM_I18NSTRING_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, and rpmDataType_u::ui8p.

Referenced by grabData(), headerAppendEntry(), and regionSwab().

§ findEntry()

static indexEntry findEntry ( Header  h,
rpmTag  tag,
rpmTagType  type 
)
static

Find matching (tag,type) entry in header.

Parameters
hheader
tagentry tag
typeentry type
Returns
header entry

< Are header entries sorted?

Definition at line 884 of file header.c.

References headerToken_s::flags, HEADERFLAG_SORTED, headerSort(), headerToken_s::index, indexCmp(), headerToken_s::indexUsed, indexEntry_s::info, entryInfo_s::tag, and entryInfo_s::type.

Referenced by copyEntry(), headerAddOrAppendEntry(), headerAppendEntry(), headerIsEntry(), headerModifyEntry(), headerRemoveEntry(), and intGetEntry().

§ grabData()

static void* grabData ( HE_t  he,
size_t *  lenp 
)
static

Return (malloc'ed) copy of (swab'd) entry data.

Parameters
hetag container
Return values
*lenpno. bytes in returned data
Returns
(malloc'ed) copy of entry data, NULL on error

Definition at line 1774 of file header.c.

References _free(), _HE_s::c, copyData(), dataLength(), _HE_s::p, _HE_s::t, and xmalloc.

Referenced by headerAddEntry(), and headerModifyEntry().

§ headerAddEntry()

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 1804 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 headerAddOrAppendEntry(), headerCopy(), and headerPut().

§ headerAddOrAppendEntry()

static int headerAddOrAppendEntry ( Header  h,
HE_t  he 
)
static

§ headerAppendEntry()

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 1858 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, SUPPORT_I18NSTRING_TYPE, _HE_s::t, _HE_s::tag, xmalloc, and xrealloc.

Referenced by headerAddOrAppendEntry().

§ headerCopy()

Header headerCopy ( Header  h)

Duplicate a header.

Parameters
hheader
Returns
new header instance

Definition at line 2185 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().

§ headerCopyLoad()

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

References headerMap().

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

§ headerCopyTags()

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 2202 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().

§ headerDel()

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

References headerRemoveEntry(), and _HE_s::tag.

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

§ headerFini()

HeaderIterator headerFini ( HeaderIterator  hi)

Destroy header tag container iterator.

Parameters
hiheader tag container iterator
Returns
NULL always

Definition at line 2125 of file header.c.

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

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

§ headerGet()

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 2222 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(), db3Acallback(), debevrTag(), debmd5sumsTag(), ensureOlder(), FDGsqlTag(), FDGxmlTag(), FDGyamlTag(), fiIntersect(), findErases(), formatValue(), fpLookupList(), fssizesTag(), ftsCacheUpdate(), getSignid(), handleInstInstalledFile(), handleOneScriptTrigger(), handleOneTrigger(), handlePreambleTag(), hCopyTag(), hdr_subscript(), headerCopyTags(), headerMacrosLoad(), headerMacrosUnload(), headerNEVRA(), hGetColor(), hLoadTID(), i18nTag(), IDTXglob(), IDTXload(), instprefixTag(), isMemberInEntry(), localeTag(), lookupPackage(), main(), makeHDRSignature(), mireSkip(), needswhatTag(), nwlookupTag(), packageBinaries(), parseDescription(), parsePreamble(), parseSpec(), pkgbaseurlTag(), pkgoriginTag(), pkgUnpackagedSubdirs(), PRCOsqlTag(), PRCOxmlTag(), PRCOyamlTag(), printNewSpecfile(), processBinaryFiles(), processPackageFiles(), providePackageNVR(), rdSignature(), readFile(), relocateFileList(), removeSillyDeps(), rpm3to4(), rpmcliInstall(), rpmdbAdd(), rpmdbExportHR_MIB(), rpmdbRemove(), rpmdsNew(), rpmdsNVRMatchesDep(), rpmdsThis(), rpmfcGenerateScriptletDeps(), rpmfiBuildFNames(), rpmfiNew(), rpmhdrLoadTag(), rpmHeadersIdentical(), rpmInstallSourcePackage(), rpmmiInit(), rpmpsmStage(), rpmReadPackageFile(), rpmReSign(), rpmteChain(), rpmteNew(), rpmtsAddInstallElement(), rpmtsAddUpgrades(), rpmtsCallback(), rpmtsCheckInstalledFiles(), rpmtsEraseDebuginfo(), rpmtsFindPubkey(), rpmtsSanityCheck(), rpmtsSolve(), rpmVerifySignatures(), rpmVersionCompare(), runImmedTriggers(), runInstScript(), runScript(), singleSprintf(), stashSt(), tag2uuidv1(), tag2uuidv5(), timeCheck(), triggercondsTag(), triggertypeTag(), whatneedsTag(), wnlookupTag(), and writeRPM().

§ headerGetBaseURL()

const char* headerGetBaseURL ( Header  h)

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

Parameters
hheader
Returns
header origin

Definition at line 1212 of file header.c.

References headerToken_s::baseurl.

Referenced by pkgbaseurlTag().

§ headerGetDigest()

const char* headerGetDigest ( Header  h)

Return digest of origin *.rpm file.

Parameters
hheader
Returns
header digest

Definition at line 1242 of file header.c.

References headerToken_s::digest.

Referenced by pkgdigestTag(), and populateInstallHeader().

§ headerGetEndOff()

rpmuint32_t headerGetEndOff ( Header  h)

Return header ending byte offset.

Parameters
hheader
Returns
header ending byte offset

Definition at line 1302 of file header.c.

References headerToken_s::endoff.

Referenced by headerendoffTag().

§ headerGetInstance()

uint32_t headerGetInstance ( Header  h)

Return header instance (if from rpmdb).

Parameters
hheader
Returns
header instance

Definition at line 1275 of file header.c.

References headerToken_s::instance.

Referenced by dbinstanceTag(), FDGsqlTag(), handleInstInstalledFile(), headerReload(), PRCOsqlTag(), rfileHeaderSprintf(), rpmdbAdd(), rpmgiNext(), rpmpsmStage(), and verifyDependencies().

§ headerGetMagic()

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

References header_magic, and headerToken_s::magic.

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

§ headerGetOrigin()

const char* headerGetOrigin ( Header  h)

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

Parameters
hheader
Returns
header origin

Definition at line 1184 of file header.c.

References headerToken_s::origin.

Referenced by hdrGetOrigin(), IDTXglob(), pkgoriginTag(), populateInstallHeader(), rpmhdr_getorigin(), rpmhdr_setorigin(), showVerifyPackage(), and verifyDependencies().

§ headerGetParent()

const char* headerGetParent ( Header  h)

Return header parent identifier (e.g parent's NVRA).

Parameters
hheader
Returns
header parent

Definition at line 1198 of file header.c.

References headerToken_s::parent.

§ headerGetPool()

static Header headerGetPool ( rpmioPool  pool)
static

§ headerGetRpmdb()

void* headerGetRpmdb ( Header  h)

Return rpmdb pointer.

Parameters
hheader
Returns
rpmdb pointer

Definition at line 1259 of file header.c.

References headerToken_s::rpmdb.

Referenced by nwlookupTag(), and wnlookupTag().

§ headerGetStartOff()

rpmuint32_t headerGetStartOff ( Header  h)

Return header starting byte offset.

Parameters
hheader
Returns
header starting byte offset

Definition at line 1290 of file header.c.

References headerToken_s::startoff.

Referenced by headerstartoffTag().

§ headerGetStatbuf()

struct stat* headerGetStatbuf ( Header  h)

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

Parameters
hheader
Returns
header stat(2) buffer

Definition at line 1228 of file header.c.

References headerToken_s::sb.

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

§ headerGetStats()

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

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

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

§ headerInit()

HeaderIterator headerInit ( Header  h)

Create header tag iterator.

Parameters
hheader
Returns
header tag iterator

Definition at line 2135 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().

§ headerIsEntry()

int headerIsEntry ( Header  h,
rpmTag  tag 
)

§ headerLoad()

Header headerLoad ( void *  uh)

§ headerMap()

static Header headerMap ( const void *  uh,
int  map 
)
static

< Is 1st header region mmap'd?

< Is 1st header region rdonly?

< Is 1st header region allocated?

Definition at line 1371 of file header.c.

References _free(), headerToken_s::bloblen, errno, headerToken_s::flags, hdrchkData, hdrchkTags, HEADERFLAG_ALLOCATED, HEADERFLAG_MAPPED, HEADERFLAG_RDONLY, headerLoad(), headerMaxbytes, and xmalloc.

Referenced by headerCopyLoad().

§ headerMod()

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

References headerModifyEntry().

Referenced by addReqProv(), relocateFileList(), and removeSillyDeps().

§ headerModifyEntry()

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 2079 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().

§ headerNew()

Header headerNew ( void  )

§ headerNext()

int headerNext ( HeaderIterator  hi,
HE_t  he,
unsigned int  flags 
)

§ headerPut()

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

§ headerReload()

Header headerReload ( Header  h,
rpmTag  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 mmap'd?

< Is 1st header region rdonly?

< Is 1st header region allocated?

Definition at line 1314 of file header.c.

References _free(), _hdr_debug, headerToken_s::baseurl, headerToken_s::blob, headerToken_s::bloblen, headerToken_s::digest, ENTRY_IS_REGION, headerToken_s::flags, HEADER_IMMUTABLE, HEADER_SIGNATURES, HEADERFLAG_ALLOCATED, HEADERFLAG_MAPPED, HEADERFLAG_RDONLY, headerFree(), headerGetInstance(), headerLoad(), headerSetBaseURL(), headerSetDigest(), headerSetInstance(), headerSetOrigin(), headerSetParent(), headerSetRpmdb(), headerUnload(), headerToken_s::index, indexEntry_s::info, headerToken_s::origin, headerToken_s::parent, headerToken_s::rpmdb, headerToken_s::sb, entryInfo_s::tag, and xstrdup().

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

§ headerRemoveEntry()

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 932 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().

§ headerScrub()

static void headerScrub ( void *  _h)
static

§ headerSetBaseURL()

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

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

Referenced by headerReload(), and rpmrepoReadHeader().

§ headerSetDigest()

int headerSetDigest ( Header  h,
const char *  digest 
)

Store digest of origin *.rpm file.

Parameters
hheader
stnew header digest
Returns
0 always

Definition at line 1249 of file header.c.

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

Referenced by headerReload(), and rpmrepoReadHeader().

§ headerSetEndOff()

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

References headerToken_s::endoff.

Referenced by rdSignature(), and rpmReadHeader().

§ headerSetInstance()

uint32_t headerSetInstance ( Header  h,
uint32_t  instance 
)

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

Parameters
hheader
instancenew header instance
Returns
0 always

Definition at line 1280 of file header.c.

References headerToken_s::instance.

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

§ headerSetMagic()

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

References headerToken_s::magic.

§ headerSetOrigin()

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

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

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

§ headerSetParent()

int headerSetParent ( Header  h,
const char *  parent 
)

Store header parent (e.g parent's NVRA).

Parameters
hheader
parentnew header parent
Returns
0 always

Definition at line 1203 of file header.c.

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

Referenced by headerReload().

§ headerSetRpmdb()

void* headerSetRpmdb ( Header  h,
void *  rpmdb 
)

Store rpmdb pointer.

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

Definition at line 1266 of file header.c.

References headerToken_s::rpmdb.

Referenced by headerReload(), and showQueryPackage().

§ headerSetStartOff()

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

References headerToken_s::startoff.

Referenced by rdSignature(), and rpmReadHeader().

§ headerSetStatbuf()

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

References headerToken_s::sb.

§ headerSizeof()

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 266 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, and entryInfo_s::type.

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

§ headerSort()

static void headerSort ( Header  h)
static

Sort tags in header.

Parameters
hheader

< Are header entries sorted?

< Are header entries sorted?

Definition at line 227 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().

§ headerUnload()

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 648 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(), rpmcliImportPubkey(), rpmdbAdd(), rpmWriteHeader(), showVerifyPackage(), and writeRPM().

§ headerUnsort()

static void headerUnsort ( Header  h)
static

Restore tags in header to original ordering.

Parameters
hheader

Definition at line 260 of file header.c.

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

Referenced by headerUnload().

§ indexCmp()

static int indexCmp ( const void *  avp,
const void *  bvp 
)
static

Definition at line 213 of file header.c.

References indexEntry_s::info, and entryInfo_s::tag.

Referenced by findEntry(), and headerSort().

§ intGetEntry()

static int intGetEntry ( Header  h,
HE_t  he,
int  flags 
)
static

Retrieve tag data from header.

Parameters
hheader
hetag container
flagsheaderGet flags
Returns
1 on success, 0 on not found

Definition at line 1689 of file header.c.

References _HE_s::c, copyEntry(), findEntry(), HEADERGET_NOI18NSTRING, indexEntry_s::info, _HE_s::p, rpmDataType_u::ptr, RPM_I18NSTRING_TYPE, RPM_STRING_TYPE, rpmDataType_u::str, _HE_s::t, _HE_s::tag, and entryInfo_s::type.

Referenced by headerGet().

§ offsetCmp()

static int offsetCmp ( const void *  avp,
const void *  bvp 
)
static

Definition at line 238 of file header.c.

References indexEntry_s::data, indexEntry_s::info, entryInfo_s::offset, and entryInfo_s::tag.

Referenced by headerUnsort().

§ regionSwab()

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 527 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().

§ rpmheRealloc()

static int rpmheRealloc ( HE_t  he)
static

§ tagSwab()

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 392 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

§ _hdr_debug

int _hdr_debug = 0

Definition at line 40 of file header.c.

Referenced by headerGet(), and headerReload().

§ _hdr_getops

rpmop _hdr_getops = &hdr_getops

Definition at line 94 of file header.c.

Referenced by rpmtsPrintStat(), and rpmtsPrintStats().

§ _hdr_loadops

rpmop _hdr_loadops = &hdr_loadops

Definition at line 90 of file header.c.

Referenced by rpmtsPrintStat(), and rpmtsPrintStats().

§ _hdr_stats

int _hdr_stats = 0

Global header stats enabler.

Definition at line 84 of file header.c.

§ _headerPool

rpmioPool _headerPool

Definition at line 161 of file header.c.

Referenced by headerGetPool(), headerLoad(), and rpmcliFini().

§ hdr_getops

struct rpmop_s hdr_getops
static

Definition at line 92 of file header.c.

§ hdr_loadops

struct rpmop_s hdr_loadops
static

Definition at line 88 of file header.c.

§ header_magic

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

Definition at line 46 of file header.c.

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

§ headerMaxbytes

size_t headerMaxbytes = (1024*1024*1024)
static

Maximum no.

of bytes permitted in a header.

Definition at line 78 of file header.c.

Referenced by headerMap().

§ typeSizes

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

Referenced by headerUnload(), and regionSwab().