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

lib/header.c File Reference

More...

#include "system.h"
#include <langinfo.h>
#include <iconv.h>
#include <header_internal.h>
#include <rpmlib.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.

#define hdrchkData(_nbytes)   ((_nbytes) & 0xff000000)
 Sanity check on data size and/or offset.


Functions

const char *const tagName (int tag)
 Return name of tag from value.

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.

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.

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 locale_match (const char *sample, const char *l_b, const char *l_e, char delim)
int headerMatchLocale (const char *td, const char *l, const char *le, int strip_lang)
 Does locale match entry in header i18n table?

char * convert (char *ed, const char *td, const char *lang)
char * headerFindI18NString (Header h, indexEntry entry)
 Return i18n string from header that matches locale.

int intGetEntry (Header h, int_32 tag, hTAG_t type, hPTR_t *p, hCNT_t c, int minMem)
 Retrieve tag data from header.

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.

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.

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 15 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 63 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 57 of file header.c.

Referenced by doHeaderUnload(), headerCopyLoad(), headerLoad(), and headerRead().

#define PARSER_BEGIN   0
 

Definition at line 36 of file header.c.

Referenced by headerSprintf().

#define PARSER_IN_ARRAY   1
 

Definition at line 37 of file header.c.

Referenced by parseFormat().

#define PARSER_IN_EXPR   2
 

Definition at line 38 of file header.c.

Referenced by parseExpression(), and parseFormat().


Function Documentation

extensionCache allocateExtensionCache const headerSprintfExtension    extensions [static]
 

Definition at line 2965 of file header.c.

References HEADER_EXT_LAST, HEADER_EXT_MORE, headerSprintfExtension_s::type, headerSprintfExtension_s::u, and xcalloc().

Referenced by headerSprintf().

char* convert char *    ed,
const char *    td,
const char *    lang
[static]
 

Definition at line 1423 of file header.c.

References _free(), and setlocale.

Referenced by headerFindI18NString().

void copyData int_32    type,
void *    dstPtr,
const void *    srcPtr,
int_32    c,
int    dataLength
[static]
 

Definition at line 1663 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 327 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 3147 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 3156 of file header.c.

References hPTR_t, int_32, and realDateFormat().

char escapedChar const char    ch [static]
 

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

References headerToken::flags, HEADERFLAG_SORTED, headerSort(), headerToken::index, indexCmp(), headerToken::indexUsed, 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 2106 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 2611 of file header.c.

References _free(), sprintfTag::arrayCount, sprintfTag::ext, sprintfTag::extNum, sprintfTag::format, getExtension(), HEADER_EXT_FORMAT, HEADER_EXT_LAST, HEADER_EXT_MORE, headerFreeData(), headerGetEntry(), headerTagFormatFunction, hPTR_t, int_32, int_8, headerSprintfExtension_s::name, sprintfTag::pad, RPM_BIN_TYPE, RPM_CHAR_TYPE, RPM_INT16_TYPE, RPM_INT32_TYPE, RPM_INT8_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, stpcpy(), sprintfTag::tag, headerSprintfExtension_s::type, sprintfTag::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 2988 of file header.c.

References _free(), extensionCache::data, extensionCache::freeit, 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 2055 of file header.c.

References _, _free(), sprintfToken::array, sprintfToken::cond, RPMMESS_WARNING, rpmMessage, sprintfToken::type, 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 2589 of file header.c.

References extensionCache::avail, extensionCache::count, extensionCache::data, extensionCache::freeit, hCNT_t, headerTagTagFunction, hPTR_t, hTYP_t, and extensionCache::type.

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

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

Referenced by headerAddEntry(), and headerModifyEntry().

int headerAddEntry Header    h,
int_32    tag,
int_32    type,
const void *    p,
int_32    c
[static]
 

Add tag to header. Duplicate tags are okay, but only defined for iteration (with the exceptions noted below). While you are allowed to add i18n string arrays through this function, you probably don't mean to. See headerAddI18NString() instead.

Parameters:
h  header
tag  tag
type  tag value data type
p  pointer to tag value(s)
c  number of values
Returns:
1 on success, 0 on failure

Definition at line 1731 of file header.c.

References entryInfo::count, indexEntry::data, headerToken::flags, grabData(), HEADERFLAG_SORTED, headerToken::index, INDEX_MALLOC_SIZE, headerToken::indexAlloced, headerToken::indexUsed, indexEntry::info, int_32, indexEntry::length, entryInfo::offset, entryInfo::tag, entryInfo::type, and xrealloc().

Referenced by addChangelogEntry(), addFileToTag(), fillOutMainPackage(), genCpioListAndHeader(), handlePreambleTag(), headerAddI18NString(), headerAddOrAppendEntry(), headerCopy(), headerCopyTags(), headerCopyWithConvert(), headerInject(), headerRegenSigHeader(), initSourceHeader(), packageBinaries(), packageSources(), parsePreamble(), parseScript(), parseSpec(), psmStage(), readIcon(), readPackageHeaders(), rpmAddSignature(), rpmdbAdd(), rpmdbRemove(), rpmReadSignature(), rpmReSign(), and writeRPM().

int headerAddI18NString Header    h,
int_32    tag,
const char *    string,
const char *    lang
[static]
 

Add locale specific tag to header. A NULL lang is interpreted as the C locale. Here are the rules:

 *      - If the tag isn't in the header, it's added with the passed string
 *         as new value.
 *      - If the tag occurs multiple times in entry, which tag is affected
 *         by the operation is undefined.
 *      - If the tag is in the header w/ this language, the entry is
 *         *replaced* (like headerModifyEntry()).
 * 
This function is intended to just "do the right thing". If you need more fine grained control use headerAddEntry() and headerModifyEntry().
Parameters:
h  header
tag  tag
string  tag value
lang  locale
Returns:
1 on success, 0 on failure

Definition at line 1853 of file header.c.

References _free(), alloca(), entryInfo::count, indexEntry::data, ENTRY_IN_REGION, findEntry(), HEADER_I18NTABLE, headerAddEntry(), indexEntry::info, int_32, indexEntry::length, entryInfo::offset, RPM_I18NSTRING_TYPE, RPM_STRING_ARRAY_TYPE, xmalloc(), and xrealloc().

Referenced by handlePreambleTag(), and parseDescription().

int headerAddOrAppendEntry Header    h,
int_32    tag,
int_32    type,
const void *    p,
int_32    c
[static]
 

Add or append element to tag array in header.

Todo:
Arg "p" should have const.
Parameters:
h  header
tag  tag
type  tag value data type
p  pointer to tag value(s)
c  number of values
Returns:
1 on success, 0 on failure

Definition at line 1823 of file header.c.

References findEntry(), headerAddEntry(), headerAppendEntry(), and int_32.

Referenced by addFileToArrayTag(), addOrAppendListEntry(), addReqProv(), genCpioListAndHeader(), mergeFiles(), processScriptFiles(), processSourceFiles(), and providePackageNVR().

int headerAppendEntry Header    h,
int_32    tag,
int_32    type,
const void *    p,
int_32    c
[static]
 

Append element to tag array in header. Appends item p to entry w/ tag and type as passed. Won't work on RPM_STRING_TYPE. Any pointers into header memory returned from headerGetEntryMinMemory() for this entry are invalid after this call has been made!

Parameters:
h  header
tag  tag
type  tag value data type
p  pointer to tag value(s)
c  number of values
Returns:
1 on success, 0 on failure

Definition at line 1776 of file header.c.

References copyData(), entryInfo::count, indexEntry::data, dataLength(), ENTRY_IN_REGION, findEntry(), indexEntry::info, int_32, indexEntry::length, entryInfo::offset, RPM_I18NSTRING_TYPE, RPM_STRING_TYPE, xmalloc(), and xrealloc().

Referenced by addChangelogEntry(), and headerAddOrAppendEntry().

Header headerCopy Header    h [static]
 

Duplicate a header.

Parameters:
h  header
Returns:
new header instance

Definition at line 3334 of file header.c.

References HEADER_IMAGE, headerAddEntry(), headerFreeData(), headerFreeIterator(), headerInitIterator(), headerNew(), headerNextIterator(), headerReload(), hPTR_t, and int_32.

Referenced by psmStage(), relocateFileList(), and rpmdbRebuild().

Header headerCopyLoad const void *    uh [static]
 

Make a copy and convert header to in-memory representation.

Parameters:
uh  on-disk header blob (i.e. with offsets)
Returns:
header

Definition at line 1088 of file header.c.

References _free(), headerToken::flags, hdrchkData, hdrchkTags, HEADERFLAG_ALLOCATED, headerLoad(), headerMaxbytes, int_32, and xmalloc().

Referenced by psmStage(), rpmdbNextIterator(), and rpmReSign().

void headerCopyTags Header    headerFrom,
Header    headerTo,
hTAG_t    tagstocopy
[static]
 

Duplicate tag values from one header into another.

Parameters:
headerFrom  source header
headerTo  destination header
tagstocopy  array of tags that are copied

Definition at line 3223 of file header.c.

References headerAddEntry(), headerFreeData(), headerGetEntryMinMemory(), headerIsEntry(), hPTR_t, hTAG_t, and int_32.

Referenced by headerInject(), packageBinaries(), and parsePreamble().

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

References convert(), entryInfo::count, indexEntry::data, findEntry(), getenv(), HEADER_I18NTABLE, headerMatchLocale(), indexEntry::info, and RPM_STRING_ARRAY_TYPE.

Referenced by intGetEntry().

Header headerFree Header    h [static]
 

Dereference a header instance.

Parameters:
h  header
Returns:
NULL always

Definition at line 134 of file header.c.

References _free(), headerToken::blob, indexEntry::data, ENTRY_IN_REGION, ENTRY_IS_REGION, headerToken::flags, HEADERFLAG_ALLOCATED, headerUnlink(), headerToken::index, headerToken::indexUsed, int_32, indexEntry::length, and headerToken::nrefs.

Referenced by alFree(), db1cput(), dbiFindMatches(), doGetRecord(), freeFi(), freePackage(), freeSpec(), headerFreeIterator(), headerInject(), headerReload(), IDTXfree(), IDTXglob(), loadFi(), main(), psmStage(), readPackageHeaders(), readRPM(), rpmdbFindByFile(), rpmdbFreeIterator(), rpmdbNextIterator(), rpmdbRebuild(), rpmdbRemove(), rpmdepFreeConflicts(), rpmFreeSignature(), rpmInstall(), rpmInstallSourcePackage(), rpmProblemSetFree(), rpmQueryVerify(), rpmReadSignature(), rpmReSign(), rpmRollback(), rpmRunTransactions(), and writeRPM().

HeaderIterator headerFreeIterator HeaderIterator    hi [static]
 

Destroy header tag iterator.

Parameters:
hi  header tag iterator
Returns:
NULL always

Definition at line 3259 of file header.c.

References _free(), headerIteratorS::h, and headerFree().

Referenced by checkForDuplicates(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), headerRegenSigHeader(), initSourceHeader(), psmStage(), rpmCheckSig(), and rpmReSign().

void* headerFreeTag Header    h,
const void *    data,
rpmTagType    type
[static]
 

Free data allocated when retrieved from header.

Parameters:
h  header
data  address of data (or NULL)
type  type of data (or -1 to force free)
Returns:
NULL always

Definition at line 1576 of file header.c.

References _free(), RPM_BIN_TYPE, RPM_I18NSTRING_TYPE, RPM_STRING_ARRAY_TYPE, and rpmTagType.

int headerGetEntry Header    h,
int_32    tag,
hTYP_t    type,
void **    p,
hCNT_t    c
[static]
 

Retrieve tag value. Will never return RPM_I18NSTRING_TYPE! RPM_STRING_TYPE elements with RPM_I18NSTRING_TYPE equivalent entries are translated (if HEADER_I18NTABLE entry is present).

Parameters:
h  header
tag  tag
Return values:
type  address of tag value data type (or NULL)
p  address of pointer to tag value(s) (or NULL)
c  address of number of values (or NULL)
Returns:
1 on success, 0 on failure

Definition at line 1606 of file header.c.

References hCNT_t, hPTR_t, hTYP_t, int_32, and intGetEntry().

Referenced by addLostFiles(), archOkay(), findPackagesWithRelocatedFiles(), findUpgradePackages(), findUpgradeSet(), formatValue(), headerNVR(), main(), osOkay(), psGetArchScore(), psmStage(), readPackageHeaders(), removeMovedFilesAlreadyHandled(), rpmHeaderGetEntry(), rpmInstall(), rpmPackageGetEntry(), rpmReadSignature(), rpmReSign(), rpmRunTransactions(), rpmVersionCompare(), singleSprintf(), unmarkPackagesAlreadyInstalled(), and writeRPM().

int headerGetEntryMinMemory Header    h,
int_32    tag,
hTYP_t    type,
hPTR_t   p,
hCNT_t    c
[static]
 

Retrieve tag value using header internal array. Get an entry using as little extra RAM as possible to return the tag value. This is only an issue for RPM_STRING_ARRAY_TYPE.

Parameters:
h  header
tag  tag
Return values:
type  address of tag value data type (or NULL)
p  address of pointer to tag value(s) (or NULL)
c  address of number of values (or NULL)
Returns:
1 on success, 0 on failure

Definition at line 1628 of file header.c.

References hCNT_t, hPTR_t, hTYP_t, int_32, and intGetEntry().

Referenced by addLostFiles(), doGetRecord(), findPackagesWithObsoletes(), findPackagesWithRelocatedFiles(), findUpgradePackages(), headerCopyTags(), and removeMovedFilesAlreadyHandled().

int headerGetRawEntry Header    h,
int_32    tag,
int_32   type,
hPTR_t   p,
int_32   c
 

Definition at line 1637 of file header.c.

References copyEntry(), findEntry(), headerIsEntry(), hPTR_t, int_32, and RPM_NULL_TYPE.

HeaderIterator headerInitIterator Header    h [static]
 

Create header tag iterator.

Parameters:
h  header
Returns:
header tag iterator

Definition at line 3273 of file header.c.

References headerIteratorS::h, headerLink(), headerSort(), headerIteratorS::next_index, and xmalloc().

Referenced by checkForDuplicates(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), headerRegenSigHeader(), initSourceHeader(), psmStage(), rpmCheckSig(), and rpmReSign().

int headerIsEntry Header    h,
int_32    tag
[static]
 

Check if tag is in header.

Parameters:
h  header
tag  tag
Returns:
1 on success, 0 on failure

Definition at line 1239 of file header.c.

References findEntry(), int_32, and RPM_NULL_TYPE.

Referenced by addChangelogEntry(), checkForRequired(), checkSpec(), compressFilelist(), doGetRecord(), expandFilelist(), fillOutMainPackage(), headerCopyTags(), headerGetRawEntry(), headerInject(), headerMergeLegacySigs(), headerRegenSigHeader(), packageBinaries(), packageSources(), parseDescription(), parseScript(), parseSpec(), processBinaryFiles(), psmStage(), readPackageHeaders(), relocateFileList(), rpmdbAdd(), rpmdbNextIterator(), rpmdbRebuild(), rpmInstallSourcePackage(), rpmPackageGetEntry(), rpmtransAddPackage(), singleSprintf(), and verifyHeader().

Header headerLink Header    h [static]
 

Reference a header instance.

Parameters:
h  header
Returns:
referenced header instance

Definition at line 106 of file header.c.

References headerToken::nrefs.

Referenced by alAddPackage(), checkPackageDeps(), dbiFindMatches(), headerInitIterator(), headerLoad(), headerNew(), IDTXglob(), IDTXload(), loadFi(), psAppend(), psmStage(), relocateFileList(), rpmdbFindByFile(), rpmdbRemove(), rpmReSign(), rpmRunTransactions(), and writeRPM().

Header headerLoad void *    uh [static]
 

Convert header to in-memory representation.

Parameters:
uh  on-disk header blob (i.e. with offsets)
Returns:
header

Definition at line 871 of file header.c.

References _free(), alloca(), headerToken::blob, entryInfo::count, indexEntry::data, headerToken::flags, hdrchkData, hdrchkTags, HEADER_BASENAMES, HEADER_I18NTABLE, HEADER_IMAGE, HEADER_OLDFILENAMES, HEADERFLAG_LEGACY, HEADERFLAG_SORTED, headerLink(), headerRemoveEntry(), headerSort(), headerToken::hv, headerToken::index, headerToken::indexAlloced, headerToken::indexUsed, indexEntry::info, int_32, indexEntry::length, headerToken::nrefs, entryInfo::offset, indexEntry::rdlen, REGION_TAG_COUNT, REGION_TAG_TYPE, regionSwab(), RPM_STRING_TYPE, entryInfo::tag, entryInfo::type, and xcalloc().

Referenced by db1cput(), headerCopyLoad(), headerRead(), and headerReload().

int headerMatchLocale const char *    td,
const char *    l,
const char *    le,
int    strip_lang
[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 1395 of file header.c.

References locale_match().

Referenced by headerFindI18NString().

int headerModifyEntry Header    h,
int_32    tag,
int_32    type,
const void *    p,
int_32    c
[static]
 

Modify tag in header. If there are multiple entries with this tag, the first one gets replaced.

Parameters:
h  header
tag  tag
type  tag value data type
p  pointer to tag value(s)
c  number of values
Returns:
1 on success, 0 on failure

Definition at line 1998 of file header.c.

References _free(), entryInfo::count, indexEntry::data, ENTRY_IN_REGION, findEntry(), grabData(), headerToken::index, indexEntry::info, int_32, indexEntry::length, entryInfo::offset, entryInfo::tag, and entryInfo::type.

Referenced by doGetRecord().

Header headerNew void    [static]
 

Create new (empty) header instance.

Returns:
header

Definition at line 171 of file header.c.

References headerToken::blob, headerToken::flags, HEADERFLAG_SORTED, headerLink(), headerToken::hv, headerToken::index, INDEX_MALLOC_SIZE, headerToken::indexAlloced, headerToken::indexUsed, headerToken::nrefs, and xcalloc().

int headerNextIterator HeaderIterator    hi,
hTAG_t    tag,
hTYP_t    type,
hPTR_t   p,
hCNT_t    c
[static]
 

Return next tag from header.

Parameters:
hi  header tag iterator
Return values:
tag  address of tag
type  address of tag value data type
p  address of pointer to tag value(s)
c  address of number of values
Returns:
1 on success, 0 on failure

Definition at line 3295 of file header.c.

References copyEntry(), ENTRY_IS_REGION, headerIteratorS::h, hCNT_t, hPTR_t, hTAG_t, hTYP_t, headerToken::index, headerToken::indexUsed, indexEntry::info, headerIteratorS::next_index, and entryInfo::tag.

Referenced by checkForDuplicates(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), headerRegenSigHeader(), initSourceHeader(), psmStage(), rpmCheckSig(), and rpmReSign().

Header headerRead FD_t    fd,
enum hMagic    magicp
[static]
 

Read (and load) header from file handle.

Parameters:
fd  file handle
magicp  read (and verify) 8 bytes of (magic, 0)?
Returns:
header (or NULL on error)

Definition at line 1123 of file header.c.

References _free(), headerToken::flags, hdrchkData, hdrchkTags, header_magic, HEADER_MAGIC_YES, HEADERFLAG_ALLOCATED, headerLoad(), headerMaxbytes, hMagic, int_32, timedRead, and xmalloc().

Referenced by doGetRecord(), main(), readPackageHeaders(), rpmReadSignature(), and writeRPM().

Header headerReload Header    h,
int    tag
[static]
 

Convert header to on-disk representation, and then reload. This is used to insure that all header data is in one chunk.

Parameters:
h  header (with pointers)
tag  region tag
Returns:
on-disk header (with offsets)

Definition at line 1055 of file header.c.

References _free(), doHeaderUnload(), ENTRY_IS_REGION, headerToken::flags, HEADER_IMMUTABLE, HEADER_SIGNATURES, HEADERFLAG_ALLOCATED, headerFree(), headerLoad(), headerToken::index, indexEntry::info, and entryInfo::tag.

Referenced by headerCopy(), rpmReSign(), and writeRPM().

int headerRemoveEntry Header    h,
int_32    tag
[static]
 

Delete tag in header. Removes all entries of type tag from the header, returns 1 if none were found.

Parameters:
h  header
tag  tag
Returns:
0 on success, 1 on failure (INCONSISTENT)

Definition at line 827 of file header.c.

References _free(), indexEntry::data, ENTRY_IN_REGION, findEntry(), headerToken::index, headerToken::indexUsed, indexEntry::info, int_32, indexEntry::length, RPM_NULL_TYPE, and entryInfo::tag.

Referenced by addFileToTag(), headerLoad(), readPackageHeaders(), rpmdbAdd(), and rpmReSign().

unsigned int headerSizeof Header    h,
enum hMagic    magicp
[static]
 

Return size of on-disk header representation in bytes.

Parameters:
h  header
magicp  include size of 8 bytes for (magic, 0)?
Returns:
size of on-disk header

Definition at line 255 of file header.c.

References ENTRY_IS_REGION, headerToken::flags, HEADER_MAGIC_NO, HEADER_MAGIC_YES, HEADERFLAG_LEGACY, headerSort(), hMagic, headerToken::index, headerToken::indexUsed, indexEntry::info, int_32, indexEntry::length, entryInfo::offset, entryInfo::type, and typeSizes.

Referenced by db1cput(), dbiUpdateRecord(), rpmdbAdd(), rpmReadSignature(), and rpmWriteSignature().

void headerSort Header    h [static]
 

Sort tags in header.

Parameters:
h  header

Definition at line 209 of file header.c.

References headerToken::flags, HEADERFLAG_SORTED, headerToken::index, indexCmp(), and headerToken::indexUsed.

Referenced by doHeaderUnload(), findEntry(), headerInitIterator(), headerInject(), headerLoad(), and headerSizeof().

char* headerSprintf Header    h,
const char *    fmt,
const struct headerTagTableEntry_s   tbltags,
const struct headerSprintfExtension_s   extensions,
errmsg_t   errmsg
[static]
 

Return formatted output string from header tags. The returned string must be free()d.

Parameters:
h  header
fmt  format to use
tbltags  array of tag name/value pairs
extensions  chained table of formatting extensions.
Return values:
errmsg  error message (if any)
Returns:
formatted output string (malloc'ed)

Definition at line 3021 of file header.c.

References _free(), allocateExtensionCache(), errmsg_t, freeExtensionCache(), parseFormat(), PARSER_BEGIN, singleSprintf(), xrealloc(), and xstrdup().

Referenced by packageBinaries(), printNewSpecfile(), psmStage(), queryHeader(), rpmHeaderGetEntry(), and rpmShowProgress().

Header headerUnlink Header    h [static]
 

Dereference a header instance.

Parameters:
h  header
Returns:
NULL always

Definition at line 121 of file header.c.

References headerToken::nrefs.

Referenced by headerFree().

void* headerUnload Header    h [static]
 

Convert header to on-disk representation.

Parameters:
h  header (with pointers)
Returns:
on-disk header blob (i.e. with offsets)

Definition at line 763 of file header.c.

References doHeaderUnload().

Referenced by dbiUpdateRecord(), and doGetRecord().

void headerUnsort Header    h [static]
 

Restore tags in header to original ordering.

Parameters:
h  header

Definition at line 242 of file header.c.

References headerToken::index, headerToken::indexUsed, and offsetCmp().

Referenced by doHeaderUnload().

int headerWrite FD_t    fd,
Header    h,
enum hMagic    magicp
[static]
 

Write (with unload) header to file handle.

Parameters:
fd  file handle
h  header
magicp  prefix write with 8 bytes of (magic, 0)?
Returns:
0 on success, 1 on error

Definition at line 1198 of file header.c.

References _free(), doHeaderUnload(), Fwrite(), header_magic, HEADER_MAGIC_NO, HEADER_MAGIC_YES, and hMagic.

Referenced by db1cput(), main(), psmStage(), rpmWriteSignature(), and writeRPM().

char* hexFormat int_32    type,
hPTR_t    data,
char *    formatPrefix,
int    padding,
int    element
[static]
 

Definition at line 3093 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 196 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 1530 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().

int locale_match const char *    sample,
const char *    l_b,
const char *    l_e,
char    delim
[static]
 

Definition at line 1363 of file header.c.

Referenced by headerMatchLocale().

char* octalFormat int_32    type,
hPTR_t    data,
char *    formatPrefix,
int    padding,
int    element
[static]
 

Definition at line 3072 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 220 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 2415 of file header.c.

References _, errmsg_t, sprintfTag::ext, sprintfTag::extNum, findTag(), freeFormat(), parseEVR(), parseFormat(), PARSER_IN_EXPR, RPMMESS_DEBUG, RPMMESS_WARNING, rpmMessage, sprintfTag::tag, 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 2165 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 3114 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 3166 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 2807 of file header.c.

References _, _free(), formatValue(), getExtension(), headerGetEntry(), headerIsEntry(), RPMMESS_WARNING, rpmMessage, stpcpy(), sprintfToken::type, sprintfToken::u, xrealloc(), and xstrdup().

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

struct HV_s hdrVec1 [static]
 

Definition at line 3356 of file header.c.


Generated on Sun Feb 2 23:32:08 2003 for rpm by doxygen1.2.18