rpm
5.2.1
|
#include "system.h"
#include <rpmiotypes.h>
#include <rpmio.h>
#include <header_internal.h>
#include "debug.h"
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 * | 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... | |
rpmuint32_t | headerGetInstance (Header h) |
Return header instance (if from rpmdb). More... | |
rpmuint32_t | headerSetInstance (Header h, rpmuint32_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, int 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 | headerMatchLocale (const char *td, const char *l, const char *le) |
Does locale match entry in header i18n table? More... | |
static char * | headerFindI18NString (Header h, indexEntry entry) |
Return i18n string from header that matches locale. 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... | |
int | headerAddI18NString (Header h, rpmTag tag, const char *string, const char *lang) |
Add locale specific tag to 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 |
|
static |
Copy (swab'd) data into store.
t | data store |
he | tag container |
nb | no. bytes in store |
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 |
Return length of entry data.
type | entry data type |
*p | tag container data |
count | entry item count |
onDisk | data is concatenated strings (with NUL's))? |
*pend | pointer to end of tag container data (or NULL) |
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 |
Find matching (tag,type) entry in header.
h | header |
tag | entry tag |
type | entry type |
< 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 |
Return (malloc'ed) copy of (swab'd) entry data.
he | tag container |
*lenp | no. bytes in returned data |
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 |
Return i18n string from header that matches locale.
h | header |
entry | i18n string data |
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().
Definition at line 151 of file header.c.
References _hdr_debug, _headerPool, headerScrub(), rpmioGetPool(), and rpmioNewPool().
Referenced by headerLoad(), and headerNew().
|
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 |
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. *
td | header i18n table data, NUL terminated |
l | start of locale to match |
le | end of locale to match |
Definition at line 1493 of file header.c.
References alloca().
Referenced by headerFindI18NString().
|
static |
< Is 1st header region allocated?
< Is 1st header region mmap'd?
< Is 1st header region mmap'd?
Definition at line 98 of file header.c.
References _free(), _hdr_stats, headerToken_s::baseurl, headerToken_s::blob, headerToken_s::bloblen, indexEntry_s::data, headerToken_s::digest, ENTRY_IN_REGION, ENTRY_IS_REGION, errno, headerToken_s::flags, HEADERFLAG_ALLOCATED, HEADERFLAG_MAPPED, headerGetStats(), headerToken_s::index, headerToken_s::indexUsed, indexEntry_s::length, headerToken_s::origin, and rpmswAdd().
Referenced by headerGetPool().
|
static |
Definition at line 197 of file header.c.
References indexEntry_s::info, and entryInfo_s::tag.
Referenced by findEntry(), and headerSort().
Retrieve tag data from header.
h | header |
he | tag container |
flags | headerGet flags |
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 |
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 |
Always realloc HE_t memory.
he | tag container |
Definition at line 416 of file header.c.
References _free(), _HE_s::c, _HE_s::freeData, _HE_s::p, rpmDataType_u::ptr, RPM_BIN_TYPE, RPM_I18NSTRING_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, RPM_UINT16_TYPE, RPM_UINT32_TYPE, RPM_UINT64_TYPE, RPM_UINT8_TYPE, rpmDataType_u::str, _HE_s::t, tagSwab(), rpmDataType_u::ui16p, rpmDataType_u::ui32p, rpmDataType_u::ui64p, rpmDataType_u::ui8p, and xmalloc().
Referenced by headerGet(), and headerNext().
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().