Main Page   Modules   Data Structures   File List   Data Fields   Globals   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

Data Structures

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)
Header headerRegenSigHeader (const Header h)

Variables

int typeSizes []

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

Referenced by addChangelogEntry(), addFileToTag(), compressFilelist(), expandFilelist(), fillOutMainPackage(), genCpioListAndHeader(), handlePreambleTag(), headerAddI18NString(), headerAddOrAppendEntry(), headerCopy(), headerCopyTags(), headerCopyWithConvert(), headerInject(), headerMergeLegacySigs(), headerRegenSigHeader(), initSourceHeader(), mungeFilelist(), packageBinaries(), packageSources(), parsePreamble(), parseScript(), parseSpec(), psmStage(), 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 1579 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 1734 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 1742 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 470 of file header.c.

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

Referenced by XrpmdbNextIterator(), and psmStage().

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

Referenced by main().

void headerFree ( Header h )
 

Dereference a header instance.

Parameters:
h   header

Definition at line 1388 of file header.c.

Referenced by XrpmdbNextIterator(), alFree(), db1cput(), dbiFindMatches(), doGetRecord(), freeFi(), freePackage(), freeSpec(), hdrDealloc(), headerFreeIterator(), headerInject(), headerReload(), loadFi(), main(), psmStage(), 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 compressFilelist(), doBuildFileList(), formatValue(), headerCopy(), headerCopyTags(), headerMergeLegacySigs(), headerRegenSigHeader(), initSourceHeader(), providePackageNVR(), rpmCheckSig(), rpmInstall(), rpmMergeHeaders(), rpmdbAdd(), rpmdbRemove(), showQueryPackage(), and singleSprintf().

void headerFreeIterator ( HeaderIterator iter )
 

Destroy header tag iterator.

Parameters:
iter   header tag iterator

Definition at line 410 of file header.c.

Referenced by checkForDuplicates(), hdrKeyList(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), headerRegenSigHeader(), 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 1365 of file header.c.

Referenced by addFileToTag(), addLostFiles(), addReqProv(), archOkay(), compressFilelist(), doBuildFileList(), findPackagesWithRelocatedFiles(), findUpgradePackages(), findUpgradeSet(), formatValue(), fssizesTag(), handlePreambleTag(), hdrVerifyFile(), headerNVR(), i18nTag(), instprefixTag(), isMemberInEntry(), main(), osOkay(), printDeps(), processBinaryFiles(), processPackageFiles(), providePackageNVR(), psGetArchScore(), psmStage(), readPackageHeaders(), removeMovedFilesAlreadyHandled(), rpmHeaderGetEntry(), rpmInstall(), rpmMergeHeaders(), rpmPackageGetEntry(), rpmReadSignature(), rpmRunTransactions(), rpmVerifyFile(), rpmVersionCompare(), rpmdbAdd(), rpmdbRemove(), showQueryPackage(), singleSprintf(), stashSt(), timeCheck(), triggercondsTag(), triggertypeTag(), unmarkPackagesAlreadyInstalled(), 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 1359 of file header.c.

Referenced by addLostFiles(), doGetRecord(), findPackagesWithObsoletes(), findPackagesWithRelocatedFiles(), findUpgradePackages(), fpLookupHeader(), headerCopyTags(), removeMovedFilesAlreadyHandled(), 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 1561 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 1166 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 399 of file header.c.

Referenced by checkForDuplicates(), hdrKeyList(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), headerRegenSigHeader(), 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 1161 of file header.c.

Referenced by addChangelogEntry(), checkForRequired(), checkSpec(), compressFilelist(), expandFilelist(), fillOutMainPackage(), handleInstInstalledFiles(), headerCopyTags(), headerGetRawEntry(), headerInject(), headerMergeLegacySigs(), headerRegenSigHeader(), mungeFilelist(), parseDescription(), parseScript(), parseSpec(), psmStage(), readPackageHeaders(), relocateFileList(), rpmHeaderFromPackage(), rpmInstallSourcePackage(), 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 1415 of file header.c.

Referenced by alAddPackage(), checkPackageDeps(), dbiFindMatches(), getTsHeader(), headerInitIterator(), loadFi(), psAppend(), psmStage(), 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 488 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 1704 of file header.c.

Referenced by doGetRecord(), mergeFiles(), psmStage(), 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 32 of file depends.c.

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

Header headerNew ( void )
 

Create new (empty) header instance.

Returns:
header

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

Referenced by checkForDuplicates(), hdrKeyList(), headerCopy(), headerCopyWithConvert(), headerMergeLegacySigs(), headerRegenSigHeader(), 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 941 of file header.c.

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

Header headerRegenSigHeader ( const Header h )
 

Regenerate signature header.

Parameters:
h   header
Returns:
regenerated signature header

Definition at line 50 of file package.c.

Referenced by psmStage().

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 895 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 1776 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 1426 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 447 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(), psmStage(), 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 888 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 465 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 1421 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 917 of file header.c.

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


Variable Documentation

int typeSizes [static]
 

Initial value:

  { 
        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 Thu Apr 19 15:29:51 2001 for rpm by doxygen1.2.6-20010408 written by Dimitri van Heesch, © 1997-2001