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

Typedefs

typedef struct headerTokenHeader
typedef struct headerIteratorSHeaderIterator
typedef char* (* headerTagFormatFunction )(int_32 type, const void *data, char *formatPrefix, int padding, int element)
typedef int (* headerTagTagFunction )(Header h, int_32 *type, const void **data, int_32 *count, int *freeData)

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

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 *p)
Header headerCopyLoad (void *p)
void* headerUnload (Header h)
Header headerReload (Header h, int tag)
Header headerNew (void)
Header headerLink (Header h)
void headerFree (Header h)
int headerUsageCount (Header h)
void headerDump (Header h, FILE *f, int flags, const struct headerTagTableEntry *tags)
char* headerSprintf (Header h, const char *fmt, const struct headerTagTableEntry *tags, const struct headerSprintfExtension *extentions, errmsg_t *errmsg)
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 iter, 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)
void headerCopyTags (Header headerFrom, Header headerTo, int_32 *tagstocopy)
void* headerFreeData (const void *data, rpmTagType type)
int headerNVR (Header h, const char **np, const char **vp, const char **rp)
void headerMergeLegacySigs (Header h, const Header sig)

Typedef Documentation

typedef struct headerToken * Header
 

Definition at line 99 of file header.h.

typedef struct headerIteratorS * HeaderIterator
 

Definition at line 103 of file header.h.

typedef char *(* headerTagFormatFunction)(int_32 type, const void *data, char *formatPrefix, int padding, int element)
 

HEADER_EXT_TAG format function prototype. This will only ever be passed RPM_TYPE_INT32 or RPM_TYPE_STRING to help keep things simple

Parameters:
type   tag type
data   tag value
formatPrefix  
padding  
element  
Returns:
formatted string

Definition at line 134 of file header.h.

typedef int(* headerTagTagFunction)(Header h, int_32 *type, const void **data, int_32 *count, int *freeData)
 

HEADER_EXT_FORMAT format function prototype. This is allowed to fail, which indicates the tag doesn't exist.

Parameters:
h   header
Return values:
type   address of tag type
data   address of tag value pointer
count   address of no. of data items
freedata   address of data-was-malloc'ed indicator
Returns:
0 on success

Definition at line 148 of file header.h.


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(), packageSources(), 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.

Referenced by main().

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(), main(), readPackageHeaders(), readRPM(), rpmFreeSignature(), rpmInstall(), rpmInstallSourcePackage(), rpmMergeHeaders(), rpmProblemSetFree(), rpmQueryVerify(), rpmReadPackageHeader(), rpmReadSignature(), rpmRunTransactions(), rpmdbFindByFile(), rpmdbFreeIterator(), rpmdbRebuild(), rpmdbRemove(), rpmdepFreeConflicts(), 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(), alAddPackage(), archOkay(), assembleFileList(), checkPackageDeps(), 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(), rpmdepCheck(), 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 alAddPackage(), 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 alAddPackage(), checkPackageDeps(), 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(), alAddPackage(), checkPackageDeps(), dbiFindMatches(), doSetupMacro(), genSourceRpmName(), handleOneTrigger(), headerMatchesDepFlags(), i18nTag(), installBinaryPackage(), lookupPackage(), packageBinaries(), parseForSimple(), parsePreamble(), parseSpec(), processBinaryFiles(), providePackageNVR(), psAppend(), removeBinaryPackage(), rpmInstall(), rpmdbAdd(), rpmdbRebuild(), rpmdbRemove(), rpmdepCheck(), 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.

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(), main(), 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(), main(), rpmWriteSignature(), and writeRPM().


Generated at Mon May 21 08:53:44 2001 for rpm by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001