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.
static void headerScrub (void *_h)
static Header headerGetPool (rpmioPool pool)
Header headerNew (void)
 Create new (empty) header instance.
static int indexCmp (const void *avp, const void *bvp)
static void headerSort (Header h)
 Sort tags in header.
static int offsetCmp (const void *avp, const void *bvp)
static void headerUnsort (Header h)
 Restore tags in header to original ordering.
size_t headerSizeof (Header h)
 Return size of on-disk header representation in bytes.
static size_t dataLength (rpmTagType type, rpmTagData *p, rpmTagCount count, int onDisk, rpmTagData *pend)
 Return length of entry data.
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 int rpmheRealloc (HE_t he)
 Always realloc HE_t memory.
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.
void * headerUnload (Header h, size_t *lenp)
 headerUnload.
static indexEntry findEntry (Header h, rpmTag tag, rpmTagType type)
 Find matching (tag,type) entry in header.
static int headerRemoveEntry (Header h, rpmTag tag)
 Delete tag in header.
Header headerLoad (void *uh)
 Convert header to in-memory representation.
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 * headerGetParent (Header h)
 Return header parent identifier (e.g parent's NVRA).
int headerSetParent (Header h, const char *parent)
 Store header parent (e.g parent's NVRA).
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.
uint32_t headerGetInstance (Header h)
 Return header instance (if from rpmdb).
uint32_t headerSetInstance (Header h, uint32_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.
Header headerReload (Header h, rpmTag tag)
 Convert header to on-disk representation, and then reload.
static Header headerMap (const void *uh, int map)
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.
static int copyEntry (const indexEntry entry, HE_t he, int minMem)
 Retrieve data from header entry.
static int intGetEntry (Header h, HE_t he, int flags)
 Retrieve tag data from header.
static int copyData (char *t, const HE_t he, size_t nb)
 Copy (swab'd) data into store.
static void * grabData (HE_t he, size_t *lenp)
 Return (malloc'ed) copy of (swab'd) entry data.
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.
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 headerCopy (Header h)
 Duplicate a header.
void headerCopyTags (Header headerFrom, Header headerTo, rpmTag *tagstocopy)
 Duplicate tag values from one header into another.
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.

Variables

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

Detailed Description

Definition in file header.c.

Macro Definition Documentation

#define _RPMTAG_INTERNAL

Definition at line 15 of file header.c.

Function Documentation

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

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

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 headerAddOrAppendEntry(), headerAppendEntry(), headerIsEntry(), headerModifyEntry(), headerRemoveEntry(), and intGetEntry().

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

static Header headerGetPool ( rpmioPool  pool)
static
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().

static void headerScrub ( void *  _h)
static
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().

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

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

static int rpmheRealloc ( HE_t  he)
static

Variable Documentation

int _hdr_debug = 0

Definition at line 40 of file header.c.

rpmop _hdr_getops = &hdr_getops

Definition at line 94 of file header.c.

Referenced by rpmtsPrintStats().

rpmop _hdr_loadops = &hdr_loadops

Definition at line 90 of file header.c.

Referenced by rpmtsPrintStats().

int _hdr_stats = 0

Global header stats enabler.

Definition at line 84 of file header.c.

rpmioPool _headerPool

Definition at line 161 of file header.c.

Referenced by headerGetPool(), and rpmcliFini().

struct rpmop_s hdr_getops
static

Definition at line 92 of file header.c.

struct rpmop_s hdr_loadops
static

Definition at line 88 of file header.c.