rpm  5.2.1
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 * 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.
 
Header headerReload (Header h, int 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 headerMatchLocale (const char *td, const char *l, const char *le)
 Does locale match entry in header i18n table?
 
static char * headerFindI18NString (Header h, indexEntry entry)
 Return i18n string from header that matches locale.
 
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.
 
int headerAddI18NString (Header h, rpmTag tag, const char *string, const char *lang)
 Add locale specific tag to 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
 

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

References RPM_I18NSTRING_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, typeSizes, 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 854 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 headerAddI18NString(), headerAddOrAppendEntry(), headerAppendEntry(), headerFindI18NString(), 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 1699 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 char* headerFindI18NString ( Header  h,
indexEntry  entry 
)
static

Return i18n string from header that matches locale.

Parameters
hheader
entryi18n string data
Returns
matching i18n string (or 1st string if no match)

Definition at line 1566 of file header.c.

References indexEntry_s::data, findEntry(), getenv(), HEADER_I18NTABLE, headerMatchLocale(), lang, and RPM_STRING_ARRAY_TYPE.

Referenced by intGetEntry().

static Header headerGetPool ( rpmioPool  pool)
static

Definition at line 151 of file header.c.

References _hdr_debug, _headerPool, headerScrub(), rpmioGetPool(), and rpmioNewPool().

Referenced by headerLoad(), and headerNew().

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 1308 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 int headerMatchLocale ( const char *  td,
const char *  l,
const char *  le 
)
static

Does locale match entry in header i18n table?

* The range [l,le) contains the next locale to match:
*    ll[_CC][.EEEEE][@dddd]
* where
*    ll ISO language code (in lowercase).
*    CC (optional) ISO coutnry code (in uppercase).
*    EEEEE      (optional) encoding (not really standardized).
*    dddd       (optional) dialect.
* 
Parameters
tdheader i18n table data, NUL terminated
lstart of locale to match
leend of locale to match
Returns
1 on match, 0 on no match

Definition at line 1493 of file header.c.

References alloca().

Referenced by headerFindI18NString().

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

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

References _HE_s::c, copyEntry(), findEntry(), headerFindI18NString(), 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 222 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 21 of file header.c.

Referenced by headerGet(), and headerGetPool().

rpmop _hdr_getops = &hdr_getops

Definition at line 83 of file header.c.

Referenced by rpmtsPrintStats().

rpmop _hdr_loadops = &hdr_loadops

Definition at line 79 of file header.c.

Referenced by rpmtsPrintStats().

int _hdr_stats = 0

Global header stats enabler.

Definition at line 73 of file header.c.

Referenced by headerGetStats(), headerScrub(), and rpmcliInit().

rpmioPool _headerPool

Definition at line 149 of file header.c.

Referenced by headerGetPool(), and rpmcliFini().

struct rpmop_s hdr_getops
static

Definition at line 81 of file header.c.

struct rpmop_s hdr_loadops
static

Definition at line 77 of file header.c.