#include "system.h"
#include <rpmio_internal.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... | |
struct | headerSprintfArgs_s |
Defines | |
#define | __HEADER_PROTOTYPES__ |
#define | PARSER_BEGIN 0 |
#define | PARSER_IN_ARRAY 1 |
#define | PARSER_IN_EXPR 2 |
#define | hdrchkTags(_ntags) ((_ntags) & 0xffff0000) |
Sanity check on no. | |
#define | hdrchkType(_type) ((_type) < RPM_MIN_TYPE || (_type) > RPM_MAX_TYPE) |
Sanity check on type values. | |
#define | hdrchkData(_nbytes) ((_nbytes) & 0xff000000) |
Sanity check on data size and/or offset and/or count. | |
#define | hdrchkAlign(_type, _off) ((_off) & (typeAlign[_type]-1)) |
Sanity check on alignment for data type. | |
#define | hdrchkRange(_dl, _off) ((_off) < 0 || (_off) > (_dl)) |
Sanity check on range of data offset. | |
Typedefs | |
typedef headerSprintfArgs_s * | headerSprintfArgs |
Functions | |
static void * | _free (const void *p) |
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL. | |
static Header | headerLink (Header h) |
Reference a header instance. | |
static Header | headerUnlink (Header h) |
Dereference a header instance. | |
static Header | headerFree (Header h) |
Dereference a header instance. | |
static 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. | |
static unsigned int | headerSizeof (Header h, enum hMagic magicp) |
Return size of on-disk header representation in bytes. | |
static int | dataLength (int_32 type, hPTR_t p, int_32 count, int onDisk, hPTR_t pend) |
Return length of entry data. | |
static int | regionSwab (indexEntry entry, int il, int dl, entryInfo pe, unsigned char *dataStart, const unsigned char *dataEnd, int regionid) |
Swap int_32 and int_16 arrays within header region. | |
static void * | doHeaderUnload (Header h, int *lengthPtr) |
static void * | headerUnload (Header h) |
Convert header to on-disk representation. | |
static indexEntry | findEntry (Header h, int_32 tag, int_32 type) |
Find matching (tag,type) entry in header. | |
static int | headerRemoveEntry (Header h, int_32 tag) |
Delete tag in header. | |
static Header | headerLoad (void *uh) |
Convert header to in-memory representation. | |
static const char * | headerGetOrigin (Header h) |
Return header origin (e.g path or URL). | |
static int | headerSetOrigin (Header h, const char *origin) |
Store header origin (e.g path or URL). | |
static int | headerGetInstance (Header h) |
Return header instance (if from rpmdb). | |
static int | headerSetInstance (Header h, int instance) |
Store header instance (e.g path or URL). | |
static Header | headerReload (Header h, int tag) |
Convert header to on-disk representation, and then reload. | |
static Header | headerCopyLoad (const void *uh) |
Make a copy and convert header to in-memory representation. | |
static Header | headerRead (FD_t fd, enum hMagic magicp) |
Read (and load) header from file handle. | |
static int | headerWrite (FD_t fd, Header h, enum hMagic magicp) |
Write (with unload) header to file handle. | |
static int | headerIsEntry (Header h, int_32 tag) |
Check if tag is in header. | |
static int | copyEntry (const indexEntry entry, hTYP_t type, hPTR_t *p, hCNT_t c, 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, int_32 tag, hTAG_t type, hPTR_t *p, hCNT_t c, int minMem) |
Retrieve tag data from header. | |
static void * | headerFreeTag (Header h, const void *data, rpmTagType type) |
Free data allocated when retrieved from header. | |
static int | headerGetEntry (Header h, int_32 tag, hTYP_t type, void **p, hCNT_t c) |
Retrieve tag value. | |
static int | headerGetEntryMinMemory (Header h, int_32 tag, hTYP_t type, hPTR_t *p, hCNT_t c) |
Retrieve tag value using header internal array. | |
int | headerGetRawEntry (Header h, int_32 tag, int_32 *type, hPTR_t *p, int_32 *c) |
static void | copyData (int_32 type, void *dstPtr, const void *srcPtr, int_32 cnt, int dataLength) |
static void * | grabData (int_32 type, hPTR_t p, int_32 c, int *lengthPtr) |
Return (malloc'ed) copy of entry data. | |
static int | headerAddEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c) |
Add tag to header. | |
static int | headerAppendEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c) |
Append element to tag array in header. | |
static int | headerAddOrAppendEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c) |
Add or append element to tag array in header. | |
static int | headerAddI18NString (Header h, int_32 tag, const char *string, const char *lang) |
Add locale specific tag to header. | |
static int | headerModifyEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c) |
Modify tag in header. | |
static char | escapedChar (const char ch) |
static sprintfToken | freeFormat (sprintfToken format, int num) |
Destroy headerSprintf format array. | |
static HeaderIterator | headerFreeIterator (HeaderIterator hi) |
Destroy header tag iterator. | |
static HeaderIterator | headerInitIterator (Header h) |
Create header tag iterator. | |
static int | headerNextIterator (HeaderIterator hi, hTAG_t tag, hTYP_t type, hPTR_t *p, hCNT_t c) |
Return next tag from header. | |
static Header | headerCopy (Header h) |
Duplicate a header. | |
static headerSprintfArgs | hsaInit (headerSprintfArgs hsa) |
Initialize an hsa iteration. | |
static sprintfToken | hsaNext (headerSprintfArgs hsa) |
Return next hsa iteration item. | |
static headerSprintfArgs | hsaFini (headerSprintfArgs hsa) |
Finish an hsa iteration. | |
static char * | hsaReserve (headerSprintfArgs hsa, size_t need) |
Reserve sufficient buffer space for next output value. | |
static const char * | myTagName (headerTagTableEntry tbl, int val, int *typep) |
Return tag name from value. | |
static int | myTagValue (headerTagTableEntry tbl, const char *name) |
Return tag value from name. | |
static int | findTag (headerSprintfArgs hsa, sprintfToken token, const char *name) |
Search extensions and tags for a name. | |
static int | parseExpression (headerSprintfArgs hsa, sprintfToken token, char *str, char **endPtr) |
Parse a headerSprintf expression. | |
static int | parseFormat (headerSprintfArgs hsa, char *str, sprintfToken *formatPtr, int *numTokensPtr, char **endPtr, int state) |
Parse a headerSprintf term. | |
static int | getExtension (headerSprintfArgs hsa, headerTagTagFunction fn, hTYP_t typeptr, hPTR_t *data, hCNT_t countptr, rpmec ec) |
Call a header extension only once, saving results. | |
static char * | formatValue (headerSprintfArgs hsa, sprintfTag tag, int element) |
Format a single item value. | |
static char * | singleSprintf (headerSprintfArgs hsa, sprintfToken token, int element) |
Format a single headerSprintf item. | |
static rpmec | rpmecNew (const headerSprintfExtension exts) |
Create an extension cache. | |
static rpmec | rpmecFree (const headerSprintfExtension exts, rpmec ec) |
Destroy an extension cache. | |
static char * | headerSprintf (Header h, const char *fmt, const struct headerTagTableEntry_s *tbltags, const struct headerSprintfExtension_s *extensions, errmsg_t *errmsg) |
Return formatted output string from header tags. | |
static char * | octalFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element) |
Return octal formatted data. | |
static char * | hexFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element) |
Return hex formatted data. | |
static char * | realDateFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element, const char *strftimeFormat) |
Return strftime formatted data. | |
static char * | dateFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element) |
Return date formatted data. | |
static char * | dayFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element) |
Return day formatted data. | |
static char * | shescapeFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element) |
Return shell escape formatted data. | |
static void | headerCopyTags (Header headerFrom, Header headerTo, hTAG_t tagstocopy) |
Duplicate tag values from one header into another. | |
Variables | |
int | _hdr_debug = 0 |
static unsigned char | header_magic [8] |
static int | typeAlign [16] |
Alignment needed for header data types. | |
static int | typeSizes [16] |
Size of header data types. | |
static size_t | headerMaxbytes = (32*1024*1024) |
Maximum no. | |
HV_t | hdrVec = &hdrVec1 |
Header methods for rpm headers. | |
const struct headerSprintfExtension_s | headerDefaultFormats [] |
Supported default header tag output formats. | |
static struct HV_s | hdrVec1 |
Definition in file header.c.
|
|
|
Sanity check on alignment for data type.
|
|
Sanity check on data size and/or offset and/or count. This check imposes a limit of 16Mb, more than enough. |
|
Sanity check on range of data offset.
|
|
Sanity check on no. of tags. This check imposes a limit of 65K tags, more than enough. |
|
Sanity check on type values.
|
|
|
|
Definition at line 32 of file header.c. Referenced by parseFormat(). |
|
Definition at line 33 of file header.c. Referenced by parseExpression(), and parseFormat(). |
|
|
|
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
|
|
Definition at line 1906 of file header.c. References RPM_I18NSTRING_TYPE, and RPM_STRING_ARRAY_TYPE. Referenced by grabData(). |
|
Return length of entry data.
Definition at line 388 of file header.c. References RPM_I18NSTRING_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, and typeSizes. Referenced by grabData(), and regionSwab(). |
|
Return date formatted data.
Definition at line 3865 of file header.c. References _, and realDateFormat(). |
|
Return day formatted data.
Definition at line 3882 of file header.c. References _, and realDateFormat(). |
|
Definition at line 2312 of file header.c. Referenced by parseFormat(). |
|
Find matching (tag,type) entry in header.
Definition at line 928 of file header.c. References headerToken_s::flags, HEADERFLAG_SORTED, headerSort(), indexCmp(), indexEntry_s::info, RPM_NULL_TYPE, entryInfo_s::tag, and entryInfo_s::type. Referenced by addMacro(), delMacro(), expandMacro(), headerFindI18NString(), headerGetRawEntry(), htGetEntry(), htHasEntry(), and intGetEntry(). |
|
Search extensions and tags for a name.
Definition at line 2668 of file header.c. References alloca(), sprintfTag_s::ext, sprintfTag_s::extNum, headerSprintfArgs_s::exts, sprintfTag_s::fmt, HEADER_EXT_FORMAT, HEADER_EXT_LAST, HEADER_EXT_MORE, HEADER_EXT_TAG, myTagValue(), headerSprintfExtension_s::name, stpcpy(), sprintfTag_s::tag, headerSprintfArgs_s::tags, sprintfTag_s::type, headerSprintfExtension_s::type, sprintfToken_s::type, headerSprintfExtension_s::u, sprintfToken_s::u, and xstrcasecmp(). Referenced by parseExpression(), and parseFormat(). |
|
Format a single item value.
Definition at line 3146 of file header.c. References _, _free(), sprintfTag_s::arrayCount, headerSprintfArgs_s::ec, headerSprintfArgs_s::errmsg, sprintfTag_s::ext, sprintfTag_s::extNum, sprintfTag_s::fmt, sprintfTag_s::format, getExtension(), headerSprintfArgs_s::h, headerFreeData(), headerGetEntry(), hsaReserve(), sprintfTag_s::pad, RPM_ASN1_TYPE, RPM_BIN_TYPE, RPM_CHAR_TYPE, RPM_INT16_TYPE, RPM_INT32_TYPE, RPM_INT64_TYPE, RPM_INT8_TYPE, RPM_OPENPGP_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, stpcpy(), sprintfTag_s::tag, headerSprintfArgs_s::val, headerSprintfArgs_s::vallen, xmalloc(), and xstrdup(). Referenced by singleSprintf(). |
|
Destroy headerSprintf format array.
Definition at line 2333 of file header.c. References _free(), sprintfToken_s::array, sprintfToken_s::cond, and sprintfToken_s::u. Referenced by parseExpression(), and parseFormat(). |
|
Call a header extension only once, saving results.
Definition at line 3116 of file header.c. References rpmec_s::avail, rpmec_s::count, rpmec_s::data, rpmec_s::freeit, headerSprintfArgs_s::h, and rpmec_s::type. Referenced by formatValue(), and singleSprintf(). |
|
Return (malloc'ed) copy of entry data.
Definition at line 1946 of file header.c. References copyData(), dataLength(), and xmalloc(). |
|
Return i18n string from header that matches locale.
Definition at line 1711 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 1880 of file header.c. References copyEntry(), findEntry(), headerIsEntry(), and RPM_NULL_TYPE. Referenced by headerGetLangs(). |
|
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. *
Definition at line 1638 of file header.c. References alloca(). Referenced by headerFindI18NString(). |
|
Return hex formatted data.
Definition at line 3785 of file header.c. References _, RPM_INT32_TYPE, RPM_INT64_TYPE, xmalloc(), and xstrdup(). |
|
Finish an hsa iteration.
Definition at line 2579 of file header.c. References headerFreeIterator(), headerSprintfArgs_s::hi, and headerSprintfArgs_s::i. |
|
Initialize an hsa iteration.
Definition at line 2515 of file header.c. References headerSprintfArgs_s::format, headerSprintfArgs_s::h, headerInitIterator(), headerSprintfArgs_s::hi, headerSprintfArgs_s::i, sprintfTag_s::tag, sprintfToken_s::type, and sprintfToken_s::u. |
|
Return next hsa iteration item.
Definition at line 2541 of file header.c. References headerSprintfArgs_s::format, headerNextIterator(), headerSprintfArgs_s::hi, headerSprintfArgs_s::i, headerSprintfArgs_s::numTokens, sprintfTag_s::tag, sprintfToken_s::type, and sprintfToken_s::u. |
|
Reserve sufficient buffer space for next output value.
Definition at line 2598 of file header.c. References headerSprintfArgs_s::alloced, headerSprintfArgs_s::val, headerSprintfArgs_s::vallen, and xrealloc(). Referenced by formatValue(), and singleSprintf(). |
|
Definition at line 251 of file header.c. References indexEntry_s::info, and entryInfo_s::tag. Referenced by findEntry(). |
|
Retrieve tag data from header.
Definition at line 1768 of file header.c. References copyEntry(), findEntry(), headerFindI18NString(), indexEntry_s::info, RPM_I18NSTRING_TYPE, RPM_NULL_TYPE, RPM_STRING_TYPE, and entryInfo_s::type. |
|
Return tag name from value.
Definition at line 2619 of file header.c. References headerTagTableEntry_s::name, name, headerTagTableEntry_s::type, headerTagTableEntry_s::val, and xtolower(). Referenced by singleSprintf(). |
|
Return tag value from name.
Definition at line 2651 of file header.c. References headerTagTableEntry_s::name, headerTagTableEntry_s::val, and xstrcasecmp(). Referenced by findTag(). |
|
Return octal formatted data.
Definition at line 3748 of file header.c. References _, RPM_INT32_TYPE, RPM_INT64_TYPE, xmalloc(), and xstrdup(). |
|
Definition at line 278 of file header.c. References indexEntry_s::data, indexEntry_s::info, entryInfo_s::offset, and entryInfo_s::tag. |
|
Parse a headerSprintf expression.
Definition at line 3007 of file header.c. References _, headerSprintfArgs_s::errmsg, findTag(), freeFormat(), parseFormat(), PARSER_IN_EXPR, sprintfToken_s::type, and sprintfToken_s::u. Referenced by parseFormat(). |
|
Parse a headerSprintf term.
Definition at line 2755 of file header.c. References _, headerSprintfArgs_s::errmsg, escapedChar(), findTag(), freeFormat(), next, parseExpression(), PARSER_IN_ARRAY, PARSER_IN_EXPR, sprintfToken_s::type, sprintfToken_s::u, xcalloc(), and xisdigit(). Referenced by parseExpression(). |
|
Return strftime formatted data.
Definition at line 3823 of file header.c. References _, RPM_INT32_TYPE, xmalloc(), and xstrdup(). Referenced by dateFormat(), and dayFormat(). |
|
Destroy an extension cache.
Definition at line 3608 of file header.c. References _free(), rpmec_s::data, HEADER_EXT_LAST, HEADER_EXT_MORE, headerSprintfExtension_s::type, and headerSprintfExtension_s::u. |
|
Create an extension cache.
Definition at line 3584 of file header.c. References HEADER_EXT_LAST, HEADER_EXT_MORE, headerSprintfExtension_s::type, headerSprintfExtension_s::u, and xcalloc(). |
|
Return shell escape formatted data.
Definition at line 3899 of file header.c. References alloca(), RPM_INT32_TYPE, RPM_INT64_TYPE, and xmalloc(). |
|
Format a single headerSprintf item.
Definition at line 3370 of file header.c. References _, headerSprintfArgs_s::ec, headerSprintfArgs_s::errmsg, formatValue(), getExtension(), headerSprintfArgs_s::h, headerGetEntry(), headerIsEntry(), hsaReserve(), myTagName(), RPM_ARRAY_RETURN_TYPE, RPM_ASN1_TYPE, RPM_BIN_TYPE, RPM_MASK_RETURN_TYPE, RPM_OPENPGP_TYPE, RPM_SCALAR_RETURN_TYPE, RPM_STRING_TYPE, snprintf(), stpcpy(), headerSprintfArgs_s::tags, sprintfToken_s::type, sprintfToken_s::u, headerSprintfArgs_s::val, and headerSprintfArgs_s::vallen. |
|
|
|
|