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

rpmdb/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  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_sheaderSprintfArgs

Functions

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

void * _free (const void *p)
 Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.

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, hPTR_t pend)
 Return length of entry data.

int regionSwab (indexEntry entry, int il, int dl, entryInfo pe, unsigned char *dataStart, const unsigned char *dataEnd, 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 headerMatchLocale (const char *td, const char *l, const char *le)
 Does locale match entry in header i18n table?

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 cnt, 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.

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)
headerSprintfArgs hsaInit (headerSprintfArgs hsa)
 Initialize an hsa iteration.

sprintfToken hsaNext (headerSprintfArgs hsa)
 Return next hsa iteration item.

headerSprintfArgs hsaFini (headerSprintfArgs hsa)
 Finish an hsa iteration.

char * hsaReserve (headerSprintfArgs hsa, size_t need)
 Reserve sufficient buffer space for next output value.

int findTag (headerSprintfArgs hsa, sprintfToken token, const char *name)
int parseExpression (headerSprintfArgs hsa, sprintfToken token, char *str, char **endPtr)
int parseFormat (headerSprintfArgs hsa, char *str, sprintfToken *formatPtr, int *numTokensPtr, char **endPtr, int state)
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.

char * formatValue (headerSprintfArgs hsa, sprintfTag tag, int element)
char * singleSprintf (headerSprintfArgs hsa, sprintfToken token, int element)
rpmec rpmecNew (const headerSprintfExtension exts)
 Create an extension cache.

rpmec rpmecFree (const headerSprintfExtension exts, rpmec ec)
 Destroy an extension 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)

Variables

int _hdr_debug = 0
unsigned char header_magic [8]
int typeAlign [16]
int typeSizes [16]
size_t headerMaxbytes = (32*1024*1024)
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 hdrchkAlign _type,
_off       ((_off) & (typeAlign[_type]-1))
 

Sanity check on alignment for data type.

Definition at line 123 of file header.c.

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

Sanity check on data size and/or offset and/or count.

This check imposes a limit of 16Mb, more than enough.

Definition at line 118 of file header.c.

#define hdrchkRange _dl,
_off       ((_off) < 0 || (_off) > (_dl))
 

Sanity check on range of data offset.

Definition at line 128 of file header.c.

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

#define hdrchkType _type       ((_type) < RPM_MIN_TYPE || (_type) > RPM_MAX_TYPE)
 

Sanity check on type values.

Definition at line 112 of file header.c.

#define PARSER_BEGIN   0
 

Definition at line 34 of file header.c.

Referenced by headerSprintf().

#define PARSER_IN_ARRAY   1
 

Definition at line 35 of file header.c.

Referenced by parseFormat().

#define PARSER_IN_EXPR   2
 

Definition at line 36 of file header.c.

Referenced by parseExpression(), and parseFormat().


Typedef Documentation

typedef struct headerSprintfArgs_s * headerSprintfArgs
 


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

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

Definition at line 1806 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,
hPTR_t    pend
[static]
 

Return length of entry data.

Parameters:
type  entry data type
p  entry data
count  entry item count
onDisk  data is concatenated strings (with NUL's))?
pend  pointer to end of data (or NULL)
Returns:
no. bytes in data, -1 on failure

Definition at line 394 of file header.c.

References 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]
 

Parameters:
type  tag type
data  tag value
formatPrefix  sprintf format string
padding  no. additional bytes needed by format string
element  (unused)
Returns:
formatted string

Definition at line 3595 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]
 

Parameters:
type  tag type
data  tag value
formatPrefix  sprintf format string
padding  no. additional bytes needed by format string
element  (unused)
Returns:
formatted string

Definition at line 3611 of file header.c.

References _, hPTR_t, int_32, and realDateFormat().

char escapedChar const char    ch [static]
 

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

References headerToken_s::flags, HEADERFLAG_SORTED, headerSort(), headerToken_s::index, indexCmp(), headerToken_s::indexUsed, indexEntry_s::info, int_32, RPM_NULL_TYPE, entryInfo_s::tag, and entryInfo_s::type.

int findTag headerSprintfArgs    hsa,
sprintfToken    token,
const char *    name
[static]
 

Parameters:
hsa  headerSprintf args
token  parsed fields
name  name to find
Returns:
0 on success, 1 on not found

Definition at line 2517 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, headerTagTableEntry_s::name, 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, headerTagTableEntry_s::val, and xstrcasecmp().

Referenced by parseExpression(), and parseFormat().

char* formatValue headerSprintfArgs    hsa,
sprintfTag    tag,
int    element
[static]
 

Parameters:
hsa  headerSprintf args
tag 
element 
Returns:
end of formatted string (NULL on error)

Definition at line 2996 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(), hPTR_t, hsaReserve(), int_32, int_8, sprintfTag_s::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_s::tag, uint_16, headerSprintfArgs_s::val, headerSprintfArgs_s::vallen, xmalloc(), and xstrdup().

Referenced by singleSprintf().

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

References _free(), sprintfToken_s::array, sprintfToken_s::cond, sprintfToken_s::type, and sprintfToken_s::u.

Referenced by headerSprintf(), parseExpression(), and parseFormat().

int getExtension headerSprintfArgs    hsa,
headerTagTagFunction    fn,
hTYP_t    typeptr,
hPTR_t   data,
hCNT_t    countptr,
rpmec    ec
[static]
 

Call a header extension only once, saving results.

Parameters:
hsa  headerSprintf args
fn 
Return values:
typeptr 
data 
countptr 
ec  extension cache
Returns:
0 on success, 1 on failure

Definition at line 2967 of file header.c.

References rpmec_s::avail, rpmec_s::count, rpmec_s::data, rpmec_s::freeit, headerSprintfArgs_s::h, hCNT_t, headerTagTagFunction, hPTR_t, hTYP_t, and rpmec_s::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, NULL on error

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

References entryInfo_s::count, indexEntry_s::data, headerToken_s::flags, grabData(), hdrchkData, hdrchkType, HEADERFLAG_SORTED, headerToken_s::index, INDEX_MALLOC_SIZE, headerToken_s::indexAlloced, headerToken_s::indexUsed, indexEntry_s::info, int_32, indexEntry_s::length, entryInfo_s::offset, entryInfo_s::tag, entryInfo_s::type, and xrealloc().

Referenced by addChangelogEntry(), addFileToTag(), fillOutMainPackage(), genCpioListAndHeader(), handlePreambleTag(), headerAddI18NString(), headerAddOrAppendEntry(), headerCopy(), headerCopyTags(), headerCopyWithConvert(), headerInject(), headerRegenSigHeader(), initSourceHeader(), legacyRetrofit(), makeHDRSignature(), mungeFilelist(), packageBinaries(), packageSources(), parsePreamble(), parseScript(), parseSpec(), readIcon(), rhnLoad(), rhnUnload(), rpmAddSignature(), rpmcliImportPubkey(), rpmdbAdd(), rpmdbRemove(), rpmfcGenerateDepends(), rpmMergeHeaders(), rpmpsmStage(), 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 2024 of file header.c.

References _free(), alloca(), entryInfo_s::count, indexEntry_s::data, ENTRY_IN_REGION, findEntry(), HEADER_I18NTABLE, headerAddEntry(), indexEntry_s::info, int_32, indexEntry_s::length, entryInfo_s::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 1994 of file header.c.

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

Referenced by addFileToArrayTag(), addOrAppendListEntry(), addReqProv(), ftsCacheUpdate(), genCpioListAndHeader(), processPubkeyFile(), processScriptFiles(), processSourceFiles(), providePackageNVR(), and rpmcliImportPubkey().

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

References copyData(), entryInfo_s::count, indexEntry_s::data, dataLength(), ENTRY_IN_REGION, findEntry(), indexEntry_s::info, int_32, indexEntry_s::length, entryInfo_s::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 2367 of file header.c.

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

Referenced by hdrUnload(), 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 1226 of file header.c.

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

Referenced by rpmdbNextIterator(), rpmpsmStage(), 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 3690 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 1614 of file header.c.

References entryInfo_s::count, indexEntry_s::data, findEntry(), getenv(), HEADER_I18NTABLE, headerMatchLocale(), indexEntry_s::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 193 of file header.c.

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

Referenced by delTE(), freeItem(), freePackage(), freeSpec(), ftsStashLatest(), hdr_dealloc(), hdrLoad(), hdrUnload(), headerFreeIterator(), headerInject(), headerReload(), headerSprintf(), IDTXfree(), IDTXglob(), main(), makeHDRSignature(), miFreeHeader(), readFile(), readRPM(), rhnLoad(), rhnUnload(), rpmcliImportPubkey(), rpmdb_subscript(), rpmdbFindByFile(), rpmdbRebuild(), rpmdbRemove(), rpmdsFree(), rpmfiFree(), rpmfiNew(), rpmFreeSignature(), rpmGraph(), rpmInstall(), rpmInstallSourcePackage(), rpmMergeHeaders(), rpmpsmStage(), rpmQueryVerify(), rpmReadHeader(), rpmReadHeaders(), rpmReadPackageFile(), rpmReadSignature(), rpmReSign(), rpmRollback(), rpmts_HdrFromFdno(), rpmtsRun(), rpmtsSolve(), and writeRPM().

HeaderIterator headerFreeIterator HeaderIterator    hi [static]
 

Destroy header tag iterator.

Parameters:
hi  header tag iterator
Returns:
NULL always

Definition at line 2287 of file header.c.

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

Referenced by checkForDuplicates(), hdrKeyList(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), headerRegenSigHeader(), hsaFini(), initSourceHeader(), rpmMergeHeaders(), rpmpsmStage(), rpmReSign(), and rpmVerifySignatures().

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

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

Referenced by formatValue(), ftsStashLatest(), getSignid(), headerNEVRA(), headerNVR(), legacyRetrofit(), main(), makeHDRSignature(), readFile(), rhnLoad(), rhnUnload(), rpmHeaderGetEntry(), rpmInstall(), rpmMergeHeaders(), rpmpsmStage(), rpmReadPackageFile(), rpmReadSignature(), rpmReSign(), rpmteNew(), rpmtsFindPubkey(), rpmtsSolve(), rpmVersionCompare(), singleSprintf(), 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 1770 of file header.c.

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

Referenced by headerCopyTags().

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

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

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

Referenced by checkForDuplicates(), hdrKeyList(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), headerRegenSigHeader(), hsaInit(), initSourceHeader(), rpmMergeHeaders(), rpmpsmStage(), rpmReSign(), and rpmVerifySignatures().

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

References findEntry(), int_32, and RPM_NULL_TYPE.

Referenced by addChangelogEntry(), checkForRequired(), checkSpec(), compressFilelist(), expandFilelist(), fillOutMainPackage(), headerCopyTags(), headerGetRawEntry(), headerInject(), headerMergeLegacySigs(), headerRegenSigHeader(), IDTXglob(), legacyRetrofit(), makeHDRSignature(), mungeFilelist(), parseDescription(), parseScript(), parseSpec(), readFile(), relocateFileList(), rhnLoad(), rhnUnload(), rpmdbAdd(), rpmdbNextIterator(), rpmdbRebuild(), rpmfiNew(), rpmInstall(), rpmInstallSourcePackage(), rpmpsmStage(), rpmReadPackageFile(), rpmtsAddInstallElement(), rpmVerifySignatures(), showVerifyPackage(), and singleSprintf().

Header headerLink Header    h [static]
 

Reference a header instance.

Parameters:
h  header
Returns:
referenced header instance

Definition at line 151 of file header.c.

References headerToken_s::nrefs.

Referenced by ftsStashLatest(), hdr_Wrap(), hdrUnload(), headerInitIterator(), headerLoad(), headerNew(), headerSprintf(), IDTXglob(), IDTXload(), relocateFileList(), rhnUnload(), rpmdbFindByFile(), rpmdbRemove(), rpmdsDup(), rpmdsNew(), rpmfiNew(), rpmInstallSourcePackage(), rpmpsmStage(), rpmReadHeader(), rpmReadPackageFile(), rpmReadSignature(), rpmReSign(), rpmtsSolve(), 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 999 of file header.c.

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

Referenced by hdrLoad(), headerCopyLoad(), headerRead(), headerReload(), rhnLoad(), rhnUnload(), rpmdbNextIterator(), rpmReadHeader(), and rpmReadSignature().

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

References alloca().

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

References _free(), entryInfo_s::count, indexEntry_s::data, ENTRY_IN_REGION, findEntry(), grabData(), headerToken_s::index, indexEntry_s::info, int_32, indexEntry_s::length, entryInfo_s::offset, entryInfo_s::tag, and entryInfo_s::type.

Header headerNew void    [static]
 

Create new (empty) header instance.

Returns:
header

Definition at line 230 of file header.c.

References headerToken_s::blob, headerToken_s::flags, HEADERFLAG_SORTED, headerLink(), headerToken_s::hv, headerToken_s::index, INDEX_MALLOC_SIZE, headerToken_s::indexAlloced, headerToken_s::indexUsed, headerToken_s::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  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 2325 of file header.c.

References copyEntry(), ENTRY_IS_REGION, headerIterator_s::h, hCNT_t, hPTR_t, hTAG_t, hTYP_t, headerToken_s::index, headerToken_s::indexUsed, indexEntry_s::info, headerIterator_s::next_index, and entryInfo_s::tag.

Referenced by checkForDuplicates(), hdrKeyList(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), headerRegenSigHeader(), hsaNext(), initSourceHeader(), rpmMergeHeaders(), rpmpsmStage(), rpmReSign(), and rpmVerifySignatures().

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

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

Referenced by main(), makeHDRSignature(), readFile(), rpmMergeHeaders(), rpmReadHeaders(), 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 1189 of file header.c.

References _free(), doHeaderUnload(), ENTRY_IS_REGION, headerToken_s::flags, HEADER_IMMUTABLE, HEADER_SIGNATURES, HEADERFLAG_ALLOCATED, headerFree(), headerLoad(), headerToken_s::index, indexEntry_s::info, and entryInfo_s::tag.

Referenced by headerCopy(), rhnUnload(), rpmpsmStage(), 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 953 of file header.c.

References _free(), indexEntry_s::data, ENTRY_IN_REGION, findEntry(), headerToken_s::index, headerToken_s::indexUsed, indexEntry_s::info, int_32, indexEntry_s::length, RPM_NULL_TYPE, and entryInfo_s::tag.

Referenced by addFileToTag(), headerLoad(), legacyRetrofit(), rpmdbAdd(), rpmfcGenerateDepends(), rpmMergeHeaders(), 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 321 of file header.c.

References ENTRY_IS_REGION, headerToken_s::flags, HEADER_MAGIC_NO, HEADER_MAGIC_YES, HEADERFLAG_LEGACY, headerSort(), hMagic, headerToken_s::index, headerToken_s::indexUsed, indexEntry_s::info, int_32, indexEntry_s::length, entryInfo_s::offset, entryInfo_s::type, and typeSizes.

Referenced by hdrUnload(), miFreeHeader(), readFile(), rhnUnload(), rpmdbAdd(), rpmReadPackageFile(), rpmReadSignature(), and rpmWriteSignature().

void headerSort Header    h [static]
 

Sort tags in header.

Parameters:
h  header

Definition at line 271 of file header.c.

References headerToken_s::flags, HEADERFLAG_SORTED, headerToken_s::index, indexCmp(), and headerToken_s::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 3412 of file header.c.

References _free(), alloca(), headerSprintfArgs_s::alloced, headerSprintfArgs_s::ec, headerSprintfArgs_s::errmsg, errmsg_t, headerSprintfArgs_s::exts, headerSprintfArgs_s::fmt, headerSprintfArgs_s::format, freeFormat(), headerSprintfArgs_s::h, headerFree(), headerLink(), hsaFini(), hsaInit(), hsaNext(), hsaReserve(), headerSprintfArgs_s::numTokens, parseFormat(), PARSER_BEGIN, rpmecFree(), rpmecNew(), singleSprintf(), stpcpy(), sprintfTag_s::tag, headerSprintfArgs_s::tags, sprintfTag_s::type, sprintfToken_s::type, sprintfToken_s::u, headerSprintfArgs_s::val, headerSprintfArgs_s::vallen, xrealloc(), and xstrdup().

Referenced by hdrSprintf(), packageBinaries(), printNewSpecfile(), queryHeader(), rpmcliImportPubkey(), rpmfiNew(), rpmHeaderGetEntry(), rpmpsmStage(), rpmShowProgress(), and rpmtsSolve().

Header headerUnlink Header    h [static]
 

Dereference a header instance.

Parameters:
h  header
Returns:
NULL always

Definition at line 175 of file header.c.

References headerToken_s::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 885 of file header.c.

References doHeaderUnload().

Referenced by hdrUnload(), miFreeHeader(), rhnUnload(), and rpmdbAdd().

void headerUnsort Header    h [static]
 

Restore tags in header to original ordering.

Parameters:
h  header

Definition at line 306 of file header.c.

References headerToken_s::index, headerToken_s::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 1346 of file header.c.

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

Referenced by main(), makeHDRSignature(), rpmpsmStage(), rpmWriteSignature(), and writeRPM().

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

Parameters:
type  tag type
data  tag value
formatPrefix  sprintf format string
padding  no. additional bytes needed by format string
element  (unused)
Returns:
formatted string

Definition at line 3531 of file header.c.

References _, hPTR_t, int_32, RPM_INT32_TYPE, xmalloc(), and xstrdup().

headerSprintfArgs hsaFini headerSprintfArgs    hsa [static]
 

Finish an hsa iteration.

Parameters:
hsa  headerSprintf args
Returns:
headerSprintf args

Definition at line 2480 of file header.c.

References headerFreeIterator(), headerSprintfArgs_s::hi, and headerSprintfArgs_s::i.

Referenced by headerSprintf().

headerSprintfArgs hsaInit headerSprintfArgs    hsa [static]
 

Initialize an hsa iteration.

Parameters:
hsa  headerSprintf args
Returns:
headerSprintf args

Definition at line 2416 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.

Referenced by headerSprintf().

sprintfToken hsaNext headerSprintfArgs    hsa [static]
 

Return next hsa iteration item.

Parameters:
hsa  headerSprintf args
Returns:
next sprintfToken (or NULL)

Definition at line 2442 of file header.c.

References headerSprintfArgs_s::format, headerNextIterator(), headerSprintfArgs_s::hi, headerSprintfArgs_s::i, int_32, headerSprintfArgs_s::numTokens, sprintfTag_s::tag, sprintfToken_s::type, and sprintfToken_s::u.

Referenced by headerSprintf().

char* hsaReserve headerSprintfArgs    hsa,
size_t    need
[static]
 

Reserve sufficient buffer space for next output value.

Parameters:
hsa  headerSprintf args
need  no. of bytes to reserve
Returns:
pointer to reserved space

Definition at line 2499 of file header.c.

References headerSprintfArgs_s::alloced, headerSprintfArgs_s::val, headerSprintfArgs_s::vallen, and xrealloc().

Referenced by formatValue(), headerSprintf(), and singleSprintf().

int indexCmp const void *    avp,
const void *    bvp
[static]
 

Definition at line 257 of file header.c.

References indexEntry_s::info, and entryInfo_s::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 1670 of file header.c.

References copyEntry(), findEntry(), hCNT_t, headerFindI18NString(), hPTR_t, hTAG_t, indexEntry_s::info, int_32, RPM_I18NSTRING_TYPE, RPM_NULL_TYPE, RPM_STRING_TYPE, and entryInfo_s::type.

Referenced by headerGetEntry(), and headerGetEntryMinMemory().

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

Parameters:
type  tag type
data  tag value
formatPrefix  sprintf format string
padding  no. additional bytes needed by format string
element  (unused)
Returns:
formatted string

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

References indexEntry_s::data, indexEntry_s::info, entryInfo_s::offset, and entryInfo_s::tag.

Referenced by headerUnsort().

int parseExpression headerSprintfArgs    hsa,
sprintfToken    token,
char *    str,
char **    endPtr
[static]
 

Parameters:
hsa  headerSprintf args
token 
str 
Return values:
endPtr 
Returns:
0 on success

Definition at line 2858 of file header.c.

References _, headerSprintfArgs_s::errmsg, findTag(), freeFormat(), parseFormat(), PARSER_IN_EXPR, sprintfToken_s::type, and sprintfToken_s::u.

Referenced by parseFormat().

int parseFormat headerSprintfArgs    hsa,
char *    str,
sprintfToken   formatPtr,
int *    numTokensPtr,
char **    endPtr,
int    state
[static]
 

Parameters:
hsa  headerSprintf args
str 
Return values:
formatPtr 
numTokensPtr 
endPtr 
Parameters:
state 
Returns:
0 on success

Definition at line 2606 of file header.c.

References _, headerSprintfArgs_s::errmsg, escapedChar(), findTag(), freeFormat(), parseExpression(), PARSER_IN_ARRAY, PARSER_IN_EXPR, sprintfToken_s::type, sprintfToken_s::u, 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 3554 of file header.c.

References _, hPTR_t, int_32, RPM_INT32_TYPE, xmalloc(), and xstrdup().

Referenced by dateFormat(), and dayFormat().

rpmec rpmecFree const headerSprintfExtension    exts,
rpmec    ec
[static]
 

Destroy an extension cache.

Parameters:
exts  headerSprintf extensions
ec  extension cache
Returns:
NULL always

Definition at line 3381 of file header.c.

References _free(), rpmec_s::data, rpmec_s::freeit, HEADER_EXT_LAST, HEADER_EXT_MORE, headerSprintfExtension_s::type, and headerSprintfExtension_s::u.

Referenced by headerSprintf().

rpmec rpmecNew const headerSprintfExtension    exts [static]
 

Create an extension cache.

Parameters:
exts  headerSprintf extensions
Returns:
new extension cache

Definition at line 3357 of file header.c.

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

Referenced by headerSprintf().

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

Parameters:
type  tag type
data  tag value
formatPrefix  sprintf format string
padding  no. additional bytes needed by format string
element  (unused)
Returns:
formatted string

Definition at line 3627 of file header.c.

References alloca(), hPTR_t, int_32, RPM_INT32_TYPE, and xmalloc().

char* singleSprintf headerSprintfArgs    hsa,
sprintfToken    token,
int    element
[static]
 

Parameters:
hsa  headerSprintf args
token 
element 
Returns:
end of formatted string (NULL on error)

Definition at line 3198 of file header.c.

References _, headerSprintfArgs_s::ec, headerSprintfArgs_s::errmsg, formatValue(), getExtension(), headerSprintfArgs_s::h, headerGetEntry(), headerIsEntry(), hsaReserve(), int_32, RPM_BIN_TYPE, RPM_STRING_TYPE, stpcpy(), tagName(), sprintfToken_s::type, sprintfToken_s::u, headerSprintfArgs_s::val, and headerSprintfArgs_s::vallen.

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.

References RPMDBI_ADDED, RPMDBI_AVAILABLE, RPMDBI_DEPENDS, RPMDBI_PACKAGES, RPMDBI_REMOVED, and xtolower().

Referenced by checkForDuplicates(), checkForRequired(), db3close(), db3New(), db3open(), dbiOpen(), i18nTag(), printNewSpecfile(), rpmdbAdd(), rpmdbMoveDatabase(), rpmdbRemove(), rpmdbRemoveDatabase(), rpmHeaderGetEntry(), singleSprintf(), and stashSt().


Variable Documentation

int _hdr_debug = 0
 

Definition at line 20 of file header.c.

HV_t hdrVec = &hdrVec1
 

Header methods for rpm headers.

Definition at line 3751 of file header.c.

struct HV_s hdrVec1 [static]
 

Definition at line 3715 of file header.c.


Generated on Sun Oct 26 13:02:07 2003 for rpm by doxygen1.2.18