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(), 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 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 _, 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 _, 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, 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, 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(), 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, 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, 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(), and headerAppendEntry().

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, 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, 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, and RPM_STRING_ARRAY_TYPE.

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 hPTR_t, 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 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(), 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(), 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, hdrVec, 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, 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, hdrVec, 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, 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, int_32, magic, 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, 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(), headerToken_s::index, headerToken_s::indexUsed, int_32, 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(), freeFormat(), headerFree(), headerLink(), hsaFini(), hsaInit(), hsaNext(), hsaReserve(), parseFormat(), PARSER_BEGIN, rpmecFree(), rpmecNew(), singleSprintf(), stpcpy(), sprintfTag_s::tag, sprintfTag_s::type, 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, and HEADER_MAGIC_YES.

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 _, 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(), headerFindI18NString(), indexEntry_s::info, 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 _, 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 _, 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(), 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 headerTagTableEntry_s::name, RPMDBI_ADDED, RPMDBI_AVAILABLE, RPMDBI_DEPENDS, RPMDBI_PACKAGES, RPMDBI_REMOVED, rpmTagTable, rpmTagTableSize, headerTagTableEntry_s::val, 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.

struct HV_s hdrVec1 [static]
 

Definition at line 3715 of file header.c.


Generated on Thu Jul 17 22:37:13 2003 for rpm by doxygen1.3