Main Page Modules Data Structures File List Data Fields Globals Related Pages

# lib/header.c File Reference

More...

`#include "system.h"`
`#include <header_internal.h>`
`#include "debug.h"`

Go to the source code of this file.

## Data Structures

struct | headerIteratorS
| Header tag iterator data structure. More...

## 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. More...
#define | hdrchkData(_nbytes) ((_nbytes) & 0xff000000)
| Sanity check on data size and/or offset. More...

## Functions

const char *const | tagName (int tag)
| Return name of tag from value. More...
void * | _free (const void *p)
| Wrapper to free(3), hides const compilation noise, permit NULL, return NULL. More...
Header | headerLink (Header h)
Header | headerUnlink (Header h)
Header | headerFree (Header h)
Header | headerNew (void)
int | indexCmp (const void *avp, const void *bvp)
void | headerSort (Header h)
int | offsetCmp (const void *avp, const void *bvp)
void | headerUnsort (Header h)
unsigned int | headerSizeof (Header h, enum hMagic magicp)
int | dataLength (int_32 type, hPTR_t p, int_32 count, int onDisk)
| Return length of entry data. More...
int | regionSwab (indexEntry entry, int il, int dl, entryInfo pe, char *dataStart, int regionid)
void * | doHeaderUnload (Header h, int *lengthPtr)
void * | headerUnload (Header h)
indexEntry | findEntry (Header h, int_32 tag, int_32 type)
| Find matching (tag,type) entry in header. More...
int | headerRemoveEntry (Header h, int_32 tag)
Header | headerLoad (void *uh)
Header | headerReload (Header h, int tag)
Header | headerCopyLoad (const void *uh)
Header | headerRead (FD_t fd, enum hMagic magicp)
int | headerWrite (FD_t fd, Header h, enum hMagic magicp)
int | headerIsEntry (Header h, int_32 tag)
int | copyEntry (const indexEntry entry, hTYP_t type, hPTR_t *p, hCNT_t c, int minMem)
int | headerMatchLocale (const char *td, const char *l, const char *le)
| Does locale match entry in header i18n table? More...
char * | headerFindI18NString (Header h, indexEntry entry)
| Return i18n string from header that matches locale. More...
int | intGetEntry (Header h, int_32 tag, hTAG_t type, hPTR_t *p, hCNT_t c, int minMem)
| Retrieve tag data from header. More...
void * | headerFreeTag (Header h, const void *data, rpmTagType type)
int | headerGetEntry (Header h, int_32 tag, hTYP_t type, void **p, hCNT_t c)
int | headerGetEntryMinMemory (Header h, int_32 tag, hTYP_t type, hPTR_t *p, hCNT_t c)
int | headerGetRawEntry (Header h, int_32 tag, int_32 *type, hPTR_t *p, int_32 *c)
void | copyData (int_32 type, void *dstPtr, const void *srcPtr, int_32 c, int dataLength)
void * | grabData (int_32 type, hPTR_t p, int_32 c, int *lengthPtr)
| Return (malloc'ed) copy of entry data. More...
int | headerAddEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
int | headerAppendEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
int | headerAddOrAppendEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
int | headerAddI18NString (Header h, int_32 tag, const char *string, const char *lang)
int | headerModifyEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
char | escapedChar (const char ch)
sprintfToken | freeFormat (sprintfToken format, int num)
| Destroy headerSprintf format array. More...
void | findTag (char *name, const headerTagTableEntry tags, const headerSprintfExtension extensions, headerTagTableEntry *tagMatch, headerSprintfExtension *extMatch)
int | parseExpression (sprintfToken token, char *str, const headerTagTableEntry tags, const headerSprintfExtension extensions, char **endPtr, errmsg_t *errmsg)
int | parseFormat (char *str, const headerTagTableEntry tags, const headerSprintfExtension extensions, sprintfToken *formatPtr, int *numTokensPtr, char **endPtr, int state, errmsg_t *errmsg)
int | getExtension (Header h, headerTagTagFunction fn, hTYP_t typeptr, hPTR_t *data, hCNT_t countptr, extensionCache ext)
char * | formatValue (sprintfTag tag, Header h, const headerSprintfExtension extensions, extensionCache extCache, int element, char **valp, int *vallenp, int *allocedp)
char * | singleSprintf (Header h, sprintfToken token, const headerSprintfExtension extensions, extensionCache extCache, int element, char **valp, int *vallenp, int *allocedp)
extensionCache | allocateExtensionCache (const headerSprintfExtension extensions)
extensionCache | freeExtensionCache (const headerSprintfExtension extensions, extensionCache cache)
char * | headerSprintf (Header h, const char *fmt, const struct headerTagTableEntry_s *tbltags, const struct headerSprintfExtension_s *extensions, errmsg_t *errmsg)
char * | octalFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element)
char * | hexFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element)
char * | realDateFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element, const char *strftimeFormat)
char * | dateFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element)
char * | dayFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element)
char * | shescapeFormat (int_32 type, hPTR_t data, char *formatPrefix, int padding, int element)
void | headerCopyTags (Header headerFrom, Header headerTo, hTAG_t tagstocopy)
HeaderIterator | headerFreeIterator (HeaderIterator hi)
HeaderIterator | headerInitIterator (Header h)
int | headerNextIterator (HeaderIterator hi, hTAG_t tag, hTYP_t type, hPTR_t *p, hCNT_t c)
Header | headerCopy (Header h)

## Variables

unsigned char | header_magic [8]
size_t | headerMaxbytes = (32*1024*1024)
int | typeSizes []
HV_t | hdrVec = &hdrVec1
const struct headerSprintfExtension_s | headerDefaultFormats []
HV_s | hdrVec1

## Detailed Description

Definition in file header.c.

## Define Documentation

#define __HEADER_PROTOTYPES__

| Definition at line 13 of file header.c.

#define hdrchkData | ( | _nbytes |  | ) | ((_nbytes) & 0xff000000)

| Sanity check on data size and/or offset. This check imposes a limit of 16Mb, more than enough. Definition at line 58 of file header.c. Referenced by doHeaderUnload, headerCopyLoad, headerLoad, and headerRead.

#define hdrchkTags | ( | _ntags |  | ) | ((_ntags) & 0xffff0000)

| Sanity check on no. of tags. This check imposes a limit of 65K tags, more than enough. Definition at line 52 of file header.c. Referenced by doHeaderUnload, headerCopyLoad, headerLoad, and headerRead.

#define PARSER_BEGIN 0

| Definition at line 31 of file header.c. Referenced by headerSprintf.

#define PARSER_IN_ARRAY 1

| Definition at line 32 of file header.c. Referenced by parseFormat.

#define PARSER_IN_EXPR 2

| Definition at line 33 of file header.c. Referenced by parseExpression, and parseFormat.

## Function Documentation

void* _free | ( | const void * | p | ) | `[inline, static]`

Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.

Parameters:

  p | memory to free

Returns:
  NULL always

Definition at line 86 of file header.c.

extensionCache allocateExtensionCache | ( | const headerSprintfExtension | extensions | ) | `[static]`

| Definition at line 2837 of file header.c. References HEADER_EXT_LAST, HEADER_EXT_MORE, headerSprintfExtension_s::type, headerSprintfExtension_s::u, and xcalloc. Referenced by headerSprintf.

void copyData | ( | int_32 | type,
|  | void * | dstPtr,
|  | const void * | srcPtr,
|  | int_32 | c,
|  | int | dataLength
| ) | `[static]`

| Definition at line 1632 of file header.c. References dataLength, int_32, RPM_I18NSTRING_TYPE, and RPM_STRING_ARRAY_TYPE. Referenced by grabData, and headerAppendEntry.

int dataLength | ( | int_32 | type,
|  | hPTR_t | p,
|  | int_32 | count,
|  | int | onDisk
| ) | `[static]`

Return length of entry data.

Todo:
  Remove sanity check exit's.

Parameters:

  type | entry data type
  p | entry data
  count | entry item count
  onDisk | data is concatenated strings (with NUL's))?

Returns:
  no. bytes in data

Definition at line 319 of file header.c.

References _, EXIT_FAILURE, hPTR_t, int_32, RPM_I18NSTRING_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, and typeSizes.

Referenced by copyData, grabData, headerAppendEntry, and regionSwab.

char* dateFormat | ( | int_32 | type,
|  | hPTR_t | data,
|  | char * | formatPrefix,
|  | int | padding,
|  | int | element
| ) | `[static]`

| Definition at line 3019 of file header.c. References hPTR_t, int_32, and realDateFormat.

char* dayFormat | ( | int_32 | type,
|  | hPTR_t | data,
|  | char * | formatPrefix,
|  | int | padding,
|  | int | element
| ) | `[static]`

| Definition at line 3028 of file header.c. References hPTR_t, int_32, and realDateFormat.

char escapedChar | ( | const char | ch | ) | `[static]`

| Definition at line 2003 of file header.c. Referenced by parseFormat.

indexEntry findEntry | ( | Header | h,
|  | int_32 | tag,
|  | int_32 | type
| ) | `[static]`

Find matching (tag,type) entry in header.

Parameters:

  h | header
  tag | entry tag
  type | entry type

Returns:
  header entry

Definition at line 771 of file header.c.

References HEADERFLAG_SORTED, headerSort, indexCmp, indexEntry::info, int_32, RPM_NULL_TYPE, entryInfo::tag, and entryInfo::type.

void findTag | ( | char * | name,
|  | const headerTagTableEntry | tags,
|  | const headerSprintfExtension | extensions,
|  | headerTagTableEntry * | tagMatch,
|  | headerSprintfExtension * | extMatch
| ) | `[static]`

| Definition at line 2058 of file header.c. References alloca, HEADER_EXT_LAST, HEADER_EXT_MORE, HEADER_EXT_TAG, headerTagTableEntry_s::name, headerSprintfExtension_s::name, stpcpy, headerSprintfExtension_s::type, headerSprintfExtension_s::u, and xstrcasecmp. Referenced by parseExpression, and parseFormat.

char* formatValue | ( | sprintfTag | tag,
|  | Header | h,
|  | const headerSprintfExtension | extensions,
|  | extensionCache | extCache,
|  | int | element,
|  | char ** | valp,
|  | int * | vallenp,
|  | int * | allocedp
| ) | `[static]`

Definition at line 2515 of file header.c.

References _free, getExtension, HEADER_EXT_FORMAT, HEADER_EXT_LAST, HEADER_EXT_MORE, headerFreeData, headerGetEntry, headerTagFormatFunction, hPTR_t, int_32, int_8, headerSprintfExtension_s::name, RPM_BIN_TYPE, RPM_CHAR_TYPE, RPM_INT16_TYPE, RPM_INT32_TYPE, RPM_INT8_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, stpcpy, headerSprintfExtension_s::type, headerSprintfExtension_s::u, uint_16, xmalloc, xrealloc, and xstrdup.

Referenced by singleSprintf.

extensionCache freeExtensionCache | ( | const headerSprintfExtension | extensions,
|  | extensionCache | cache
| ) | `[static]`

Returns:
  NULL always

Definition at line 2860 of file header.c.

References _free, extensionCache::data, HEADER_EXT_LAST, HEADER_EXT_MORE, headerSprintfExtension_s::type, and headerSprintfExtension_s::u.

Referenced by headerSprintf.

sprintfToken freeFormat | ( | sprintfToken | format,
|  | int | num
| ) | `[static]`

Destroy headerSprintf format array.

Parameters:

  format | sprintf format array
  num | number of elements

Returns:
  NULL always

Definition at line 2024 of file header.c.

References _free, and sprintfToken::u.

Referenced by parseExpression, and parseFormat.

int getExtension | ( | Header | h,
|  | headerTagTagFunction | fn,
|  | hTYP_t | typeptr,
|  | hPTR_t * | data,
|  | hCNT_t | countptr,
|  | extensionCache | ext
| ) | `[static]`

Returns:
  0 on success, 1 on failure

Definition at line 2493 of file header.c.

References hCNT_t, headerTagTagFunction, hPTR_t, and hTYP_t.

Referenced by formatValue, and singleSprintf.

void* grabData | ( | int_32 | type,
|  | hPTR_t | p,
|  | int_32 | c,
|  | int * | lengthPtr
| ) | `[static]`

Return (malloc'ed) copy of entry data.

Parameters:

  type | entry data type
  p | entry data
  c | entry item count

Return values:

  lengthPtr | no. bytes in returned data

Returns:
  (malloc'ed) copy of entry data

Definition at line 1671 of file header.c.

References copyData, dataLength, hPTR_t, int_32, and xmalloc.

Referenced by headerAddEntry, and headerModifyEntry.

char* headerFindI18NString | ( | Header | h,
|  | indexEntry | entry
| ) | `[static]`

Return i18n string from header that matches locale.

Parameters:

  h | header
  entry | i18n string data

Returns:
  matching i18n string (or 1st string if no match)

Definition at line 1445 of file header.c.

References indexEntry::data, findEntry, getenv, HEADER_I18NTABLE, headerMatchLocale, RPM_STRING_ARRAY_TYPE, and table.

Referenced by intGetEntry.

int headerGetRawEntry | ( | Header | h,
|  | int_32 | tag,
|  | int_32 * | type,
|  | hPTR_t * | p,
|  | int_32 * | c
| ) |

| Definition at line 1606 of file header.c. References copyEntry, findEntry, headerIsEntry, hPTR_t, int_32, and RPM_NULL_TYPE.

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:

  td | header i18n table data, NUL terminated
  l | start of locale to match
  le | end of locale to match

Returns:
  1 on match, 0 on no match

Definition at line 1372 of file header.c.

References alloca.

Referenced by headerFindI18NString.

char* hexFormat | ( | int_32 | type,
|  | hPTR_t | data,
|  | char * | formatPrefix,
|  | int | padding,
|  | int | element
| ) | `[static]`

| Definition at line 2965 of file header.c. References _, hPTR_t, int_32, RPM_INT32_TYPE, xmalloc, and xstrdup.

int indexCmp | ( | const void * | avp,
|  | const void * | bvp
| ) | `[static]`

| Definition at line 188 of file header.c. References indexEntry::info, and entryInfo::tag. Referenced by findEntry, and headerSort.

int intGetEntry | ( | Header | h,
|  | int_32 | tag,
|  | hTAG_t | type,
|  | hPTR_t * | p,
|  | hCNT_t | c,
|  | int | minMem
| ) | `[static]`

Retrieve tag data from header.

Parameters:

  h | header
  tag | tag to retrieve

Return values:

  type | address of type (or NULL)
  p | address of data (or NULL)
  c | address of count (or NULL)

Parameters:

  minMem | string pointers reference header memory?

Returns:
  1 on success, 0 on not found

Definition at line 1499 of file header.c.

References copyEntry, findEntry, hCNT_t, headerFindI18NString, hPTR_t, hTAG_t, indexEntry::info, int_32, RPM_I18NSTRING_TYPE, RPM_NULL_TYPE, RPM_STRING_TYPE, and entryInfo::type.

Referenced by headerGetEntry, and headerGetEntryMinMemory.

char* octalFormat | ( | int_32 | type,
|  | hPTR_t | data,
|  | char * | formatPrefix,
|  | int | padding,
|  | int | element
| ) | `[static]`

| Definition at line 2944 of file header.c. References _, hPTR_t, int_32, RPM_INT32_TYPE, xmalloc, and xstrdup.

int offsetCmp | ( | const void * | avp,
|  | const void * | bvp
| ) | `[static]`

| Definition at line 212 of file header.c. References indexEntry::data, indexEntry::info, entryInfo::offset, and entryInfo::tag. Referenced by headerUnsort.

int parseExpression | ( | sprintfToken | token,
|  | char * | str,
|  | const headerTagTableEntry | tags,
|  | const headerSprintfExtension | extensions,
|  | char ** | endPtr,
|  | errmsg_t * | errmsg
| ) | `[static]`

| Definition at line 2367 of file header.c. References _, errmsg_t, findTag, freeFormat, parseFormat, PARSER_IN_EXPR, sprintfToken::type, headerSprintfExtension_s::u, sprintfToken::u, headerTagTableEntry_s::val, and xstrdup. Referenced by parseFormat.

int parseFormat | ( | char * | str,
|  | const headerTagTableEntry | tags,
|  | const headerSprintfExtension | extensions,
|  | sprintfToken * | formatPtr,
|  | int * | numTokensPtr,
|  | char ** | endPtr,
|  | int | state,
|  | errmsg_t * | errmsg
| ) | `[static]`

| Definition at line 2117 of file header.c. References _, sprintfToken::array, errmsg_t, escapedChar, findTag, freeFormat, parseExpression, PARSER_IN_ARRAY, PARSER_IN_EXPR, sprintfToken::string, sprintfToken::type, headerSprintfExtension_s::u, sprintfToken::u, headerTagTableEntry_s::val, xcalloc, and xisdigit. Referenced by headerSprintf, and parseExpression.

char* realDateFormat | ( | int_32 | type,
|  | hPTR_t | data,
|  | char * | formatPrefix,
|  | int | padding,
|  | int | element,
|  | const char * | strftimeFormat
| ) | `[static]`

| Definition at line 2986 of file header.c. References _, hPTR_t, int_32, RPM_INT32_TYPE, xmalloc, and xstrdup. Referenced by dateFormat, and dayFormat.

char* shescapeFormat | ( | int_32 | type,
|  | hPTR_t | data,
|  | char * | formatPrefix,
|  | int | padding,
|  | int | element
| ) | `[static]`

| Definition at line 3038 of file header.c. References alloca, hPTR_t, int_32, RPM_INT32_TYPE, and xmalloc.

char* singleSprintf | ( | Header | h,
|  | sprintfToken | token,
|  | const headerSprintfExtension | extensions,
|  | extensionCache | extCache,
|  | int | element,
|  | char ** | valp,
|  | int * | vallenp,
|  | int * | allocedp
| ) | `[static]`

| Definition at line 2711 of file header.c. References formatValue, getExtension, headerGetEntry, headerIsEntry, stpcpy, sprintfToken::u, and xrealloc. Referenced by headerSprintf.

const char* const tagName | ( | int | tag | ) |

Return name of tag from value.

Parameters:

  tag | tag value

Returns:
  name of tag

Definition at line 10 of file tagName.c.

## Variable Documentation

HV_t hdrVec = &hdrVec1

| Header methods for rpm headers. Definition at line 3264 of file header.c.

struct HV_s hdrVec1`[static]`

| Definition at line 3228 of file header.c.