Main Page   Modules   Compound List   File List   Compound Members   File Members   Related Pages  

HEADER.


Files

file  formats.c
file  header.c
file  header.h
 An rpm header carries all information about a package.

file  package.c
file  rpmlib.h

Compounds

struct  headerSprintfExtension
struct  headerTagTableEntry

Enumerations

enum  headerSprintfExtenstionType { HEADER_EXT_LAST = 0, HEADER_EXT_FORMAT, HEADER_EXT_MORE, HEADER_EXT_TAG }
enum  hMagic { HEADER_MAGIC_NO = 0, HEADER_MAGIC_YES = 1 }
enum  rpmTagType_e {
  RPM_NULL_TYPE = 0, RPM_CHAR_TYPE = 1, RPM_INT8_TYPE = 2, RPM_INT16_TYPE = 3,
  RPM_INT32_TYPE = 4, RPM_STRING_TYPE = 6, RPM_BIN_TYPE = 7, RPM_STRING_ARRAY_TYPE = 8,
  RPM_I18NSTRING_TYPE = 9#define RPM_MAX_TYPE
}
enum  rpmSubTagType_e { RPM_REGION_TYPE = -10, RPM_BIN_ARRAY_TYPE = -11, RPM_XREF_TYPE = -12 }

Functions

char* headerSprintf (Header h, const char * fmt, const struct headerTagTableEntry * tags, const struct headerSprintfExtension * extentions, errmsg_t * errmsg)
void headerCopyTags (Header headerFrom, Header headerTo, int_32 *tagstocopy)
void* headerFreeData ( const void * data, rpmTagType type)
Header headerRead (FD_t fd, enum hMagic magicp)
int headerWrite (FD_t fd, Header h, enum hMagic magicp)
unsigned int headerSizeof (Header h, enum hMagic magicp)
Header headerLoad (void *uh)
Header headerCopyLoad (void *uh)
void* headerUnload (Header h)
Header headerReload (Header h, int tag)
Header headerNew ()
Header headerLink (Header h)
void headerFree (Header h)
int headerUsageCount (Header h)
void headerDump (Header h, FILE *f, int flags, const struct headerTagTableEntry * tags)
int headerAddEntry (Header h, int_32 tag, int_32 type, const void *p, int_32 c)
int headerModifyEntry (Header h, int_32 tag, int_32 type, void *p, int_32 c)
char** headerGetLangs (Header h)
int headerAddI18NString (Header h, int_32 tag, const char * string, const char * lang)
int headerAppendEntry (Header h, int_32 tag, int_32 type, void * p, int_32 c)
int headerAddOrAppendEntry (Header h, int_32 tag, int_32 type, void * p, int_32 c)
int headerGetEntry (Header h, int_32 tag, int_32 * type, void **p, int_32 * c)
int headerGetEntryMinMemory (Header h, int_32 tag, int_32 *type, const void **p, int_32 *c)
int headerGetRawEntry (Header h, int_32 tag, int_32 * type, const void ** p, int_32 *c)
int headerIsEntry (Header h, int_32 tag)
int headerRemoveEntry (Header h, int_32 tag)
HeaderIterator headerInitIterator (Header h)
int headerNextIterator (HeaderIterator hi, int_32 * tag, int_32 * type, const void ** p, int_32 * c)
void headerFreeIterator (HeaderIterator iter)
Header headerCopy (Header h)
void headerSort (Header h)
void headerUnsort (Header h)
int headerNVR (Header h, const char **np, const char **vp, const char **rp)
void headerMergeLegacySigs (Header h, const Header sig)

Variables

const struct headerSprintfExtension headerDefaultFormats []
int typeSizes []

Enumeration Type Documentation

enum hMagic
 

Include calculation for 8 bytes of (magic, 0)?

Enumeration values:
HEADER_MAGIC_NO  
HEADER_MAGIC_YES  

Definition at line 173 of file header.h.

enum headerSprintfExtenstionType
 

Enumeration values:
HEADER_EXT_LAST   End of extension chain.
HEADER_EXT_FORMAT   headerTagFormatFunction extension
HEADER_EXT_MORE   Chain to next table.
HEADER_EXT_TAG   headerTagTagFunction extension

Definition at line 115 of file header.h.

enum rpmSubTagType_e
 

New rpm data types under consideration/development. These data types may (or may not) be added to rpm at some point. In order to avoid incompatibility with legacy versions of rpm, these data (sub-)types are introduced into the header by overloading RPM_BIN_TYPE, with the binary value of the tag a 16 byte image of what should/will be in the header index, followed by per-tag private data.

Enumeration values:
RPM_REGION_TYPE  
RPM_BIN_ARRAY_TYPE  
Todo:
Implement, kinda like RPM_STRING_ARRAY_TYPE for known (but variable) length binary data.
RPM_XREF_TYPE  
Todo:
Implement, intent is to to carry a (???,tagNum,valNum) cross reference to retrieve data from other tags.

Definition at line 559 of file header.h.

enum rpmTagType_e
 

The basic types of data in tags from headers.

Enumeration values:
RPM_NULL_TYPE  
RPM_CHAR_TYPE  
RPM_INT8_TYPE  
RPM_INT16_TYPE  
RPM_INT32_TYPE  
RPM_STRING_TYPE  
RPM_BIN_TYPE  
RPM_STRING_ARRAY_TYPE  
RPM_I18NSTRING_TYPE  

Definition at line 517 of file header.h.


Function Documentation

int headerAddEntry ( Header h,
int_32 tag,
int_32 type,
const void * p,
int_32 c )
 

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

Referenced by addChangelogEntry(), addFileToTag(), compressFilelist(), expandFilelist(), fillOutMainPackage(), genCpioListAndHeader(), handlePreambleTag(), headerAddI18NString(), headerAddOrAppendEntry(), headerCopy(), headerCopyTags(), headerCopyWithConvert(), headerInject(), headerMergeLegacySigs(), initSourceHeader(), installBinaryPackage(), mungeFilelist(), packageBinaries(), parsePreamble(), parseScript(), parseSpec(), readIcon(), readPackageHeaders(), relocateFileList(), rpmAddSignature(), rpmMergeHeaders(), rpmReadSignature(), rpmVerifyFile(), rpmdbAdd(), rpmdbRemove(), and writeRPM().

int headerAddI18NString ( Header h,
int_32 tag,
const char * string,
const char * lang )
 

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

Referenced by handlePreambleTag(), and parseDescription().

int headerAddOrAppendEntry ( Header h,
int_32 tag,
int_32 type,
void * p,
int_32 c )
 

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

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

int headerAppendEntry ( Header h,
int_32 tag,
int_32 type,
void * p,
int_32 c )
 

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

Referenced by addChangelogEntry(), and headerAddOrAppendEntry().

Header headerCopy ( Header h )
 

Duplicate a header.

Parameters:
h   header
Returns:
new header instance

Definition at line 435 of file header.c.

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

Header headerCopyLoad ( void * p )
 

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

Parameters:
p   on-disk header (with offsets)
Returns:
header

Definition at line 582 of file header.c.

Referenced by XrpmdbNextIterator().

void headerCopyTags ( Header headerFrom,
Header headerTo,
int_32 * tagstocopy )
 

Duplicate tag values from one header into another.

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

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

void headerDump ( Header h,
FILE * f,
int flags,
const struct headerTagTableEntry * tags )
 

Dump a header in human readable format (for debugging).

Parameters:
h   header
flags   0 or HEADER_DUMP_LINLINE
tags   array of tag name/value pairs

Definition at line 972 of file header.c.

void headerFree ( Header h )
 

Dereference a header instance.

Parameters:
h   header

Definition at line 1359 of file header.c.

Referenced by XrpmdbNextIterator(), alFree(), db1cput(), dbiFindMatches(), doGetRecord(), freeFi(), freePackage(), freeSpec(), hdrDealloc(), headerFreeIterator(), headerInject(), headerReload(), installArchive(), installBinaryPackage(), readPackageHeaders(), readRPM(), rpmFreeSignature(), rpmInstall(), rpmInstallSourcePackage(), rpmMergeHeaders(), rpmProblemSetFree(), rpmQueryVerify(), rpmReadPackageHeader(), rpmReadSignature(), rpmRunTransactions(), rpmdbFindByFile(), rpmdbFreeIterator(), rpmdbRebuild(), rpmdbRemove(), and writeRPM().

void * headerFreeData ( const void * data,
rpmTagType type ) [inline, static]
 

Free data allocated when retrieved from header.

Parameters:
data   address of data
type   type of data
Returns:
NULL always

Definition at line 538 of file header.h.

Referenced by formatValue(), headerCopy(), headerCopyTags(), headerMergeLegacySigs(), initSourceHeader(), relocateFileList(), rpmCheckSig(), rpmMergeHeaders(), rpmdbAdd(), rpmdbRemove(), runInstScript(), and singleSprintf().

void headerFreeIterator ( HeaderIterator iter )
 

Destroy header tag iterator.

Parameters:
iter   header tag iterator

Definition at line 375 of file header.c.

Referenced by checkForDuplicates(), hdrKeyList(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), initSourceHeader(), rpmCheckSig(), and rpmMergeHeaders().

int headerGetEntry ( Header h,
int_32 tag,
int_32 * type,
void ** p,
int_32 * c )
 

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
p   address of pointer to tag value(s)
c   address of number of values
Returns:
1 on success, 0 on failure

Definition at line 1336 of file header.c.

Referenced by addFileToTag(), addReqProv(), archOkay(), assembleFileList(), compressFilelist(), doBuildFileList(), findUpgradeSet(), formatValue(), fssizesTag(), handleOneTrigger(), handlePreambleTag(), hdrVerifyFile(), headerMatchesDepFlags(), headerNVR(), i18nTag(), installArchive(), installBinaryPackage(), installSources(), instprefixTag(), isMemberInEntry(), main(), markReplacedFiles(), mergeFiles(), osOkay(), printDeps(), processBinaryFiles(), processPackageFiles(), providePackageNVR(), psGetArchScore(), rangeMatchesDepFlags(), readPackageHeaders(), relocateFileList(), removeBinaryPackage(), rpmHeaderGetEntry(), rpmInstall(), rpmInstallLoadMacros(), rpmInstallSourcePackage(), rpmMergeHeaders(), rpmPackageGetEntry(), rpmReadSignature(), rpmRunTransactions(), rpmVerifyFile(), rpmVersionCompare(), rpmdbAdd(), rpmdbRemove(), rpmtransAddPackage(), runImmedTriggers(), runInstScript(), runScript(), setFileOwners(), showQueryPackage(), singleSprintf(), skipFiles(), stashSt(), timeCheck(), triggercondsTag(), triggertypeTag(), verifyHeader(), and writeRPM().

int headerGetEntryMinMemory ( Header h,
int_32 tag,
int_32 * type,
const void ** p,
int_32 * c )
 

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
p   address of pointer to tag value(s)
c   address of number of values
Returns:
1 on success, 0 on failure

Definition at line 1330 of file header.c.

Referenced by doGetRecord(), fpLookupHeader(), handleInstInstalledFiles(), handleRmvdInstalledFiles(), headerCopyTags(), mergeFiles(), rpmRunTransactions(), rpmdbFindByFile(), and rpmdbFindFpList().

char ** headerGetLangs ( Header h )
 

Return array of locales found in header. The array is terminated with a NULL sentinel.

Parameters:
h   header
Returns:
array of locales (or NULL on error)

Definition at line 1532 of file header.c.

int headerGetRawEntry ( Header h,
int_32 tag,
int_32 * type,
const void ** p,
int_32 * c )
 

Retrieve tag value with type match. If *type is RPM_NULL_TYPE any type will match, otherwise only *type will match.

Parameters:
h   header
tag   tag
Return values:
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 1137 of file header.c.

Referenced by headerGetLangs().

HeaderIterator headerInitIterator ( Header h )
 

Create header tag iterator.

Parameters:
h   header
Returns:
header tag iterator

Definition at line 364 of file header.c.

Referenced by checkForDuplicates(), hdrKeyList(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), initSourceHeader(), rpmCheckSig(), and rpmMergeHeaders().

int headerIsEntry ( Header h,
int_32 tag )
 

Check if tag is in header.

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

Definition at line 1132 of file header.c.

Referenced by addChangelogEntry(), assembleFileList(), checkForRequired(), checkSpec(), compressFilelist(), expandFilelist(), fillOutMainPackage(), handleInstInstalledFiles(), headerCopyTags(), headerGetRawEntry(), headerInject(), headerMergeLegacySigs(), installArchive(), installBinaryPackage(), installSources(), mungeFilelist(), parseDescription(), parseScript(), parseSpec(), readPackageHeaders(), relocateFileList(), rpmHeaderFromPackage(), rpmPackageGetEntry(), rpmReadSignature(), rpmdbRebuild(), rpmtransAddPackage(), singleSprintf(), and verifyHeader().

Header headerLink ( Header h )
 

Reference a header instance.

Parameters:
h   header
Returns:
referenced header instance

Definition at line 1386 of file header.c.

Referenced by dbiFindMatches(), getTsHeader(), headerInitIterator(), installArchive(), psAppend(), relocateFileList(), rpmRunTransactions(), rpmdbFindByFile(), rpmdbMINext(), rpmdbRemove(), and rpmdbSubscript().

Header headerLoad ( void * p )
 

Convert header to in-memory representation.

Parameters:
p   on-disk header (with offsets)
Returns:
header

Definition at line 453 of file header.c.

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

void headerMergeLegacySigs ( Header h,
const Header sig )
 

Translate and merge legacy signature tags into header.

Parameters:
h   header
sig   signature header

Definition at line 22 of file package.c.

Referenced by rpmReadPackageHeader(), rpmReadPackageInfo(), and writeRPM().

int headerModifyEntry ( Header h,
int_32 tag,
int_32 type,
void * p,
int_32 c )
 

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

Referenced by doGetRecord(), installBinaryPackage(), mergeFiles(), and relocateFileList().

int headerNVR ( Header h,
const char ** np,
const char ** vp,
const char ** rp )
 

Return name, version, release strings from header.

Parameters:
h   header
Return values:
np   address of name pointer (or NULL)
vp   address of version pointer (or NULL)
rp   address of release pointer (or NULL)
Returns:
0 always

Definition at line 22 of file depends.c.

Referenced by XrpmdbNextIterator(), dbiFindMatches(), doSetupMacro(), genSourceRpmName(), handleOneTrigger(), headerMatchesDepFlags(), i18nTag(), installBinaryPackage(), lookupPackage(), packageBinaries(), parseForSimple(), parsePreamble(), parseSpec(), processBinaryFiles(), providePackageNVR(), psAppend(), removeBinaryPackage(), rpmInstall(), rpmdbAdd(), rpmdbRebuild(), rpmdbRemove(), rpmtransAddPackage(), runScript(), runTriggers(), showQueryPackage(), verifyDependencies(), and writeRPM().

Header headerNew ( void )
 

Create new (empty) header instance.

Returns:
header

Definition at line 1341 of file header.c.

Referenced by headerCopy(), headerCopyWithConvert(), initSourceHeader(), newPackage(), newSpec(), rpmNewSignature(), and rpmReadSignature().

int headerNextIterator ( HeaderIterator iter,
int_32 * tag,
int_32 * type,
const void ** p,
int_32 * c )
 

Return next tag from header.

Parameters:
iter   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 381 of file header.c.

Referenced by checkForDuplicates(), hdrKeyList(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), initSourceHeader(), rpmCheckSig(), and rpmMergeHeaders().

Header headerRead ( FD_t fd,
enum hMagic magicp )
 

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

Referenced by doGetRecord(), readPackageHeaders(), rpmMergeHeaders(), rpmReadHeaders(), rpmReadSignature(), and writeRPM().

Header headerReload ( Header h,
int tag )
 

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

Referenced by headerCopy(), and writeRPM().

int headerRemoveEntry ( Header h,
int_32 tag )
 

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

Referenced by addFileToTag(), compressFilelist(), expandFilelist(), headerLoad(), readPackageHeaders(), rpmMergeHeaders(), and rpmdbAdd().

unsigned int headerSizeof ( Header h,
enum hMagic magicp )
 

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

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

void headerSort ( Header h )
 

Sort tags in header.

Parameters:
h   header

Definition at line 412 of file header.c.

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

char * headerSprintf ( Header h,
const char * fmt,
const struct headerTagTableEntry * tags,
const struct headerSprintfExtension * extentions,
errmsg_t * errmsg )
 

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

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

Referenced by packageBinaries(), printNewSpecfile(), queryHeader(), rpmHeaderGetEntry(), and showProgress().

void * headerUnload ( Header h )
 

Convert header to on-disk representation.

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

Definition at line 859 of file header.c.

Referenced by dbiUpdateRecord(), doGetRecord(), and hdrUnload().

void headerUnsort ( Header h )
 

Restore tags in header to original ordering.

Parameters:
h   header

Definition at line 430 of file header.c.

Referenced by doHeaderUnload().

int headerUsageCount ( Header h )
 

Return header reference count.

Parameters:
h   header
Returns:
no. of references

Definition at line 1392 of file header.c.

int headerWrite ( FD_t fd,
Header h,
enum hMagic magicp )
 

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

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


Variable Documentation

const struct headerSprintfExtension headerDefaultFormats[]
 

Initializer:

{
    { HEADER_EXT_FORMAT, "octal", { octalFormat } },
    { HEADER_EXT_FORMAT, "hex", { hexFormat } },
    { HEADER_EXT_FORMAT, "date", { dateFormat } },
    { HEADER_EXT_FORMAT, "day", { dayFormat } },
    { HEADER_EXT_FORMAT, "shescape", { shescapeFormat } },
    { HEADER_EXT_LAST, NULL, { NULL } }
}
Supported default header tag output formats.

Definition at line 2699 of file header.c.

int typeSizes[] [static]
 

Initializer:

{ 
        0,      
        1,      
        1,      
        2,      
        4,      
        -1,     
        -1,     
        1,      
        -1,     
        -1      
}
Alignment needs (and sizeof scalars types) for internal rpm data types.

Definition at line 47 of file header.c.


Generated at Sun Apr 8 18:43:08 2001 for rpm by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000