rpm  5.2.1
Data Structures | Defines | Typedefs | Functions | Variables
#include "system.h"
#include <sys/file.h>
#include <rpmiotypes.h>
#include <rpmlog.h>
#include <rpmpgp.h>
#include <rpmurl.h>
#include <rpmmacro.h>
#include <rpmsq.h>
#include <argv.h>
#include <rpmtypes.h>
#include "header_internal.h"
#include <rpmevr.h>
#include "rpmdb.h"
#include "pkgio.h"
#include "fprint.h"
#include "legacy.h"
#include "debug.h"
Include dependency graph for rpmdb.c:

Go to the source code of this file.

Data Structures

struct  pbm_set
union  _dbswap
struct  rpmmi_s

Defines

#define _MIRE_INTERNAL
#define _RPMTAG_INTERNAL
#define _RPMEVR_INTERNAL   /* XXX isInstallPrereq */
#define _RPMDB_INTERNAL
#define UINT32_T   rpmuint32_t
#define _DB_TAGGED_FILE_INDICES   1
#define _DB_TAGGED_FINDBYFILE   1
#define _DBI_FLAGS   0
#define _DBI_PERMS   0644
#define _DBI_MAJOR   -1
#define __PBM_NBITS   /*@-sizeoftype@*/(8 * sizeof(__pbm_bits))/*@=sizeoftype@*/
#define __PBM_IX(d)   ((d) / __PBM_NBITS)
#define __PBM_MASK(d)   ((__pbm_bits) 1 << (((unsigned)(d)) % __PBM_NBITS))
#define __PBM_BITS(set)   ((set)->bits)
#define PBM_FREE(s)   _free(s);
#define PBM_SET(d, s)   (__PBM_BITS (s)[__PBM_IX (d)] |= __PBM_MASK (d))
#define PBM_CLR(d, s)   (__PBM_BITS (s)[__PBM_IX (d)] &= ~__PBM_MASK (d))
#define PBM_ISSET(d, s)   ((__PBM_BITS (s)[__PBM_IX (d)] & __PBM_MASK (d)) != 0)
#define PBM_ALLOC(d)   xcalloc(__PBM_IX (d) + 1, __PBM_NBITS/8)
#define DB1vec   NULL
#define DB2vec   NULL
#define DB3vec   NULL
#define SQLITEvec   NULL
#define _DBSWAP(_a)
#define _DB_ROOT   "/"
#define _DB_HOME   "%{?_dbpath}"
#define _DB_FLAGS   0
#define _DB_MODE   0
#define _DB_PERMS   0644
#define _DB_MAJOR   -1
#define _DB_ERRPFX   "rpmdb"
#define _RECNUM   rpmmiInstance(mi)

Typedefs

typedef unsigned int __pbm_bits

Functions

pgpDig rpmtsDig (void *ts)
void rpmtsCleanDig (void *ts)
static pbm_setPBM_REALLOC (pbm_set **sp, int *odp, int nd)
 Reallocate a bit map.
static unsigned char nibble (char c)
 Convert hex to binary nibble.
static char * bin2hex (const void *data, size_t size)
 Convert binary blob to printable hex string.
static size_t dbiTagToDbix (rpmdb db, rpmTag tag)
 Return dbi index used for rpm tag.
static void dbiTagsInit (tagStore_t *dbiTagsP, size_t *dbiNTagsP)
 Initialize database (index, tag) tuple from configuration.
static int checkfd (const char *devnull, int fdno, int flags)
dbiIndex dbiOpen (rpmdb db, rpmTag tag, unsigned int flags)
static dbiIndexItem dbiIndexNewItem (unsigned int hdrNum, unsigned int tagNum)
 Create and initialize item for index database set.
static int dbt2set (dbiIndex dbi, DBT *data, dbiIndexSet *setp)
 Convert retrieved data to index set.
static int set2dbt (dbiIndex dbi, DBT *data, dbiIndexSet set)
 Convert index set to database representation.
static int hdrNumCmp (const void *one, const void *two)
static int dbiAppendSet (dbiIndexSet set, const void *recs, int nrecs, size_t recsize, int sortset)
 Append element(s) to set of index database items.
static int dbiPruneSet (dbiIndexSet set, void *recs, int nrecs, size_t recsize, int sorted)
 Remove element(s) from set of index database items.
unsigned int dbiIndexSetCount (dbiIndexSet set)
unsigned int dbiIndexRecordOffset (dbiIndexSet set, int recno)
unsigned int dbiIndexRecordFileNumber (dbiIndexSet set, int recno)
dbiIndexSet dbiFreeIndexSet (dbiIndexSet set)
int rpmdbCheckTerminate (int terminate)
 Check rpmdb signal handler for trapped signal and/or requested exit.
int rpmdbCheckSignals (void)
 Check for and exit on termination signals.
static int blockSignals (rpmdb db, sigset_t *oldMask)
 Block all signals, returning previous signal mask.
static int unblockSignals (rpmdb db, sigset_t *oldMask)
 Restore signal mask.
static const char * queryHeader (Header h, const char *qfmt)
 Return header query string.
static int rpmdbExportInfo (rpmdb db, Header h, int adding)
 Write added/removed header info.
static rpmdb rpmdbGetPool (rpmioPool pool)
int rpmdbOpenAll (rpmdb db)
 Open all database indices.
int rpmdbBlockDBI (rpmdb db, int tag)
 Block access to a single database index.
int rpmdbCloseDBI (rpmdb db, int tag)
 Close a single database index.
int rpmdbClose (rpmdb db)
 Close all database indices and free rpmdb.
int rpmdbSync (rpmdb db)
 Sync all database indices.
static const char * rpmdbURIPath (const char *uri)
 Return macro expanded absolute path to rpmdb.
rpmdb rpmdbNew (const char *root, const char *home, int mode, int perms, int flags)
int rpmdbOpenDatabase (const char *prefix, const char *dbpath, int _dbapi, rpmdb *dbp, int mode, int perms, int flags)
int rpmdbOpen (const char *prefix, rpmdb *dbp, int mode, int perms)
 Open rpm database.
int rpmdbInit (const char *prefix, int perms)
 Initialize database.
int rpmdbVerifyAllDBI (rpmdb db)
 Verify all database components.
int rpmdbVerify (const char *prefix)
 Open and verify all database components.
static unsigned taghash (const char *s)
 Return a tagnum with hash on the (directory) path in upper 16 bits.
static int dbiIntersect (unsigned int tag, dbiIndexSet dnset, dbiIndexSet bnset, dbiIndexSet *matches)
 Return the intersection of dirName <=> baseName index sets.
static int rpmdbFindByFile (rpmdb db, const char *filespec, DBT *key, DBT *data, dbiIndexSet *matches)
 Find file matches in database.
int rpmdbCount (rpmdb db, rpmTag tag, const void *keyp, size_t keylen)
 Return number of instances of key in a tag index.
int rpmdbCountPackages (rpmdb db, const char *name)
 Return number of instances of package in Name index.
static rpmRC dbiFindMatches (dbiIndex dbi, DBC *dbcursor, DBT *key, DBT *data, const char *name, const char *version, const char *release, dbiIndexSet *matches)
 Attempt partial matches on name[-version[-release]] strings.
static rpmRC dbiFindByLabel (dbiIndex dbi, DBC *dbcursor, DBT *key, DBT *data, const char *arg, dbiIndexSet *matches)
 Lookup by name, name-version, and finally by name-version-release.
void * dbiStatsAccumulator (dbiIndex dbi, int opx)
static int miFreeHeader (rpmmi mi, dbiIndex dbi)
 Rewrite a header into packages (if necessary) and free the header.
static void rpmmiFini (void *_mi)
static rpmmi rpmmiGetPool (rpmioPool pool)
unsigned int rpmmiInstance (rpmmi mi)
 Return header instance join key for current position of rpmdb iterator.
unsigned int rpmmiFilenum (rpmmi mi)
 Return header tag index join key for current position of rpmdb iterator.
int rpmmiCount (rpmmi mi)
 Return number of elements in rpm database iterator.
static int mireCmp (const void *a, const void *b)
 Compare iterator selectors by rpm tag (qsort/bsearch).
static char * mireDup (rpmTag tag, rpmMireMode *modep, const char *pattern)
 Copy pattern, escaping for appropriate mode.
int rpmmiAddPattern (rpmmi mi, rpmTag tag, rpmMireMode mode, const char *pattern)
 Add pattern to iterator selector.
static int mireSkip (const rpmmi mi)
 Return iterator selector match.
int rpmmiSetRewrite (rpmmi mi, int rewrite)
 Prepare iterator for lazy writes.
int rpmmiSetModified (rpmmi mi, int modified)
 Modify iterator to mark header for lazy write on release.
int rpmmiSetHdrChk (rpmmi mi, rpmts ts)
 Modify iterator to verify retrieved header blobs.
static int rpmmiGet (dbiIndex dbi, DBC *dbcursor, DBT *kp, DBT *vp, unsigned int flags)
Header rpmmiNext (rpmmi mi)
 Return next package header from iteration.
static void rpmdbSortIterator (rpmmi mi)
static int rpmdbGrowIterator (rpmmi mi, int fpNum, unsigned int exclude, unsigned int tag)
int rpmmiPrune (rpmmi mi, int *hdrNums, int nHdrNums, int sorted)
 Remove items from set of package instances to iterate.
int rpmmiGrow (rpmmi mi, const int *hdrNums, int nHdrNums)
 Append items to set of package instances to iterate.
rpmmi rpmmiInit (rpmdb db, rpmTag tag, const void *keyp, size_t keylen)
 Return database iterator.
int rpmdbMireApply (rpmdb db, rpmTag tag, rpmMireMode mode, const char *pat, const char ***argvp)
 Return array of keys matching a pattern.
int rpmdbRemove (rpmdb db, int rid, unsigned int hdrNum, rpmts ts)
 Remove package header from rpm database and indices.
int rpmdbAdd (rpmdb db, int iid, Header h, rpmts ts)
 Add package header to rpm database and indices.
int rpmdbFindFpList (void *_db, fingerPrint *fpList, void *_matchList, int numItems, unsigned int exclude)
 Find fingerprint matches in database.
static int rpmioFileExists (const char *urlfn)
 Check if file exists using stat(2).
static int rpmdbRemoveDatabase (const char *prefix, const char *dbpath, int _dbapi, const tagStore_t dbiTags, size_t dbiNTags)
static int rpmdbMoveDatabase (const char *prefix, const char *olddbpath, int _olddbapi, const char *newdbpath, int _newdbapi, const tagStore_t dbiTags, size_t dbiNTags)
int rpmdbRebuild (const char *prefix, rpmts ts)
 Rebuild database indices from package headers.

Variables

int _rpmdb_debug = 0
static int _rebuildinprogress = 0
static int _db_filter_dups = 0
static int _db_tagged_file_indices = 1
static int _db_tagged_findbyfile = 1
static struct _dbiVec * mydbvecs []
static rpmdb rpmdbRock
static rpmmi rpmmiRock
rpmioPool _rpmdbPool
int _rpmmi_debug = 0
rpmioPool _rpmmiPool
static int _rpmmi_usermem = 1

Detailed Description

Definition in file rpmdb.c.


Define Documentation

#define __PBM_BITS (   set)    ((set)->bits)

Definition at line 95 of file rpmdb.c.

Referenced by PBM_REALLOC().

#define __PBM_IX (   d)    ((d) / __PBM_NBITS)

Definition at line 88 of file rpmdb.c.

Referenced by PBM_REALLOC().

#define __PBM_MASK (   d)    ((__pbm_bits) 1 << (((unsigned)(d)) % __PBM_NBITS))

Definition at line 89 of file rpmdb.c.

#define __PBM_NBITS   /*@-sizeoftype@*/(8 * sizeof(__pbm_bits))/*@=sizeoftype@*/

Definition at line 87 of file rpmdb.c.

Referenced by PBM_REALLOC().

#define _DB_ERRPFX   "rpmdb"

Definition at line 1167 of file rpmdb.c.

Referenced by rpmdbNew().

#define _DB_FLAGS   0

Definition at line 1162 of file rpmdb.c.

Referenced by rpmdbNew().

#define _DB_HOME   "%{?_dbpath}"

Definition at line 1161 of file rpmdb.c.

Referenced by rpmdbNew().

#define _DB_MAJOR   -1

Definition at line 1166 of file rpmdb.c.

Referenced by rpmdbNew().

#define _DB_MODE   0

Definition at line 1163 of file rpmdb.c.

Referenced by rpmdbNew().

#define _DB_PERMS   0644

Definition at line 1164 of file rpmdb.c.

Referenced by rpmdbNew().

#define _DB_ROOT   "/"

Definition at line 1160 of file rpmdb.c.

Referenced by rpmdbNew().

#define _DB_TAGGED_FILE_INDICES   1

Definition at line 70 of file rpmdb.c.

#define _DB_TAGGED_FINDBYFILE   1

Definition at line 75 of file rpmdb.c.

#define _DBI_FLAGS   0

Definition at line 79 of file rpmdb.c.

#define _DBI_MAJOR   -1

Definition at line 81 of file rpmdb.c.

#define _DBI_PERMS   0644

Definition at line 80 of file rpmdb.c.

#define _DBSWAP (   _a)
Value:
{ unsigned char _b, *_c = (_a).uc; \
    _b = _c[3]; _c[3] = _c[0]; _c[0] = _b; \
    _b = _c[2]; _c[2] = _c[1]; _c[1] = _b; \
  }

Definition at line 474 of file rpmdb.c.

Referenced by dbt2set(), rpmdbAdd(), rpmdbRemove(), rpmmiNext(), and set2dbt().

#define _MIRE_INTERNAL

Definition at line 13 of file rpmdb.c.

#define _RECNUM   rpmmiInstance(mi)

Referenced by rpmdbRebuild().

#define _RPMDB_INTERNAL

Definition at line 34 of file rpmdb.c.

#define _RPMEVR_INTERNAL   /* XXX isInstallPrereq */

Definition at line 23 of file rpmdb.c.

Definition at line 20 of file rpmdb.c.

#define DB1vec   NULL

Definition at line 287 of file rpmdb.c.

#define DB2vec   NULL

Definition at line 288 of file rpmdb.c.

#define DB3vec   NULL

Definition at line 298 of file rpmdb.c.

#define PBM_ALLOC (   d)    xcalloc(__PBM_IX (d) + 1, __PBM_NBITS/8)

Definition at line 102 of file rpmdb.c.

Referenced by dbiOpen().

#define PBM_CLR (   d,
 
)    (__PBM_BITS (s)[__PBM_IX (d)] &= ~__PBM_MASK (d))

Definition at line 99 of file rpmdb.c.

#define PBM_FREE (   s)    _free(s);

Definition at line 97 of file rpmdb.c.

Referenced by rpmdbClose().

#define PBM_ISSET (   d,
 
)    ((__PBM_BITS (s)[__PBM_IX (d)] & __PBM_MASK (d)) != 0)

Definition at line 100 of file rpmdb.c.

Referenced by rpmmiNext().

#define PBM_SET (   d,
 
)    (__PBM_BITS (s)[__PBM_IX (d)] |= __PBM_MASK (d))

Definition at line 98 of file rpmdb.c.

Referenced by rpmmiNext().

#define SQLITEvec   NULL

Definition at line 310 of file rpmdb.c.

#define UINT32_T   rpmuint32_t

Typedef Documentation

typedef unsigned int __pbm_bits

Definition at line 85 of file rpmdb.c.


Function Documentation

static char* bin2hex ( const void *  data,
size_t  size 
) [static]

Convert binary blob to printable hex string.

Parameters:
databinary data
sizesize of data in bytes
Returns:
malloc'd hex string

Definition at line 155 of file rpmdb.c.

References xmalloc().

Referenced by mireSkip().

static int blockSignals ( rpmdb  db,
sigset_t *  oldMask 
) [static]

Block all signals, returning previous signal mask.

Parameters:
dbrpm database
Return values:
*oldMaskprevious sigset
Returns:
0 on success

Definition at line 822 of file rpmdb.c.

Referenced by miFreeHeader(), rpmdbAdd(), rpmdbMoveDatabase(), and rpmdbRemove().

static int checkfd ( const char *  devnull,
int  fdno,
int  flags 
) [inline, static]

Definition at line 320 of file rpmdb.c.

References errno.

Referenced by dbiOpen().

static int dbiAppendSet ( dbiIndexSet  set,
const void *  recs,
int  nrecs,
size_t  recsize,
int  sortset 
) [static]

Append element(s) to set of index database items.

Parameters:
setset of index database items
recsarray of items to append to set
nrecsnumber of items
recsizesize of an array item
sortsetshould resulting set be sorted?
Returns:
0 success, 1 failure (bad args)

Definition at line 634 of file rpmdb.c.

References hdrNumCmp(), recs, set(), and xrealloc().

Referenced by dbiIntersect(), rpmdbAdd(), rpmdbFindByFile(), rpmdbFindFpList(), and rpmmiGrow().

static rpmRC dbiFindByLabel ( dbiIndex  dbi,
DBC dbcursor,
DBT key,
DBT data,
const char *  arg,
dbiIndexSet matches 
) [static]

Lookup by name, name-version, and finally by name-version-release.

Both version and release can be patterns.

Todo:
Name must be an exact match, as name is a db key.
Parameters:
dbiindex database handle (always RPMTAG_NAME)
dbcursorindex database cursor
keysearch key/length/flags
datasearch data/length/flags
argname[-version[-release]] string
Return values:
matchesset of header instances that match
Returns:
RPMRC_OK on match, RPMRC_NOMATCH or RPMRC_FAIL

Definition at line 1849 of file rpmdb.c.

References alloca(), dbiFindMatches(), dbiFreeIndexSet(), RPMRC_NOTFOUND, and stpcpy().

Referenced by rpmmiInit().

static rpmRC dbiFindMatches ( dbiIndex  dbi,
DBC dbcursor,
DBT key,
DBT data,
const char *  name,
const char *  version,
const char *  release,
dbiIndexSet matches 
) [static]

Attempt partial matches on name[-version[-release]] strings.

Parameters:
dbiindex database handle (always RPMTAG_NAME)
dbcursorindex database cursor
keysearch key/length/flags
datasearch data/length/flags
namepackage name
versionpackage version (can be a pattern)
releasepackage release (can be a pattern)
Return values:
matchesset of header instances that match
Returns:
RPMRC_OK on match, RPMRC_NOMATCH or RPMRC_FAIL

Definition at line 1753 of file rpmdb.c.

References _, __db_dbt::data, DB_NOTFOUND, DB_SET, dbiFreeIndexSet(), dbiIndexRecordOffset(), dbiIndexSetCount(), dbt2set(), RPMDBI_PACKAGES, rpmlog(), RPMLOG_ERR, rpmmiAddPattern(), rpmmiFree(), rpmmiInit(), rpmmiNext(), RPMMIRE_DEFAULT, RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, RPMTAG_RELEASE, RPMTAG_VERSION, __db_dbt::size, tagName(), and UINT32_T.

Referenced by dbiFindByLabel().

static dbiIndexItem dbiIndexNewItem ( unsigned int  hdrNum,
unsigned int  tagNum 
) [static]

Create and initialize item for index database set.

Parameters:
hdrNumheader instance in db
tagNumtag index in header
Returns:
new item

Definition at line 460 of file rpmdb.c.

References xcalloc().

Referenced by rpmdbAdd(), and rpmdbRemove().

unsigned int dbiIndexRecordFileNumber ( dbiIndexSet  set,
int  recno 
)

Definition at line 710 of file rpmdb.c.

Referenced by rpmdbFindByFile(), rpmmiNext(), and rpmtsRun().

unsigned int dbiIndexRecordOffset ( dbiIndexSet  set,
int  recno 
)

Definition at line 705 of file rpmdb.c.

Referenced by dbiFindMatches(), rpmmiNext(), and rpmtsRun().

unsigned int dbiIndexSetCount ( dbiIndexSet  set)

Definition at line 700 of file rpmdb.c.

Referenced by dbiFindMatches(), rpmdbCount(), and rpmtsRun().

static int dbiIntersect ( unsigned int  tag,
dbiIndexSet  dnset,
dbiIndexSet  bnset,
dbiIndexSet matches 
) [static]

Return the intersection of dirName <=> baseName index sets.

Parameters:
tagdirName hash tag.
dnsetdirName's set. bnset baseName's set.
Return values:
*matchesintersection of dnset and bnset (NULL if disjoint).
Returns:
no. of matches

Definition at line 1430 of file rpmdb.c.

References alloca(), dbiAppendSet(), and xcalloc().

Referenced by rpmdbFindByFile().

dbiIndex dbiOpen ( rpmdb  db,
rpmTag  tag,
unsigned int  flags 
)
static int dbiPruneSet ( dbiIndexSet  set,
void *  recs,
int  nrecs,
size_t  recsize,
int  sorted 
) [static]

Remove element(s) from set of index database items.

Parameters:
setset of index database items
recsarray of items to remove from set
nrecsnumber of items
recsizesize of an array item
sortedarray is already sorted?
Returns:
0 success, 1 failure (no items found)

Definition at line 673 of file rpmdb.c.

References hdrNumCmp(), and set().

Referenced by rpmdbRemove(), and rpmmiPrune().

void* dbiStatsAccumulator ( dbiIndex  dbi,
int  opx 
)

Definition at line 1933 of file rpmdb.c.

static void dbiTagsInit ( tagStore_t dbiTagsP,
size_t *  dbiNTagsP 
) [static]

Initialize database (index, tag) tuple from configuration.

Definition at line 214 of file rpmdb.c.

References _free(), RPMDBI_PACKAGES, rpmExpand(), tagStoreFree(), tagValue(), xcalloc(), xisspace(), xrealloc(), and xstrdup().

Referenced by rpmdbNew(), and rpmdbRebuild().

static size_t dbiTagToDbix ( rpmdb  db,
rpmTag  tag 
) [static]

Return dbi index used for rpm tag.

Parameters:
dbrpm database
tagrpm tag
Returns:
dbi index, 0xffffffff on error

Definition at line 196 of file rpmdb.c.

Referenced by dbiOpen().

static int dbt2set ( dbiIndex  dbi,
DBT data,
dbiIndexSet setp 
) [static]

Convert retrieved data to index set.

Parameters:
dbiindex database handle
dataretrieved data
Return values:
setp(malloc'ed) index set
Returns:
0 on success

Definition at line 487 of file rpmdb.c.

References _DBSWAP, __db_dbt::data, set(), __db_dbt::size, _dbswap::ui, and xmalloc().

Referenced by dbiFindMatches(), rpmdbAdd(), rpmdbCount(), rpmdbFindByFile(), rpmdbGrowIterator(), rpmdbRemove(), and rpmmiInit().

static int hdrNumCmp ( const void *  one,
const void *  two 
) [static]

Definition at line 618 of file rpmdb.c.

Referenced by dbiAppendSet(), dbiPruneSet(), and rpmdbSortIterator().

static int miFreeHeader ( rpmmi  mi,
dbiIndex  dbi 
) [static]

Rewrite a header into packages (if necessary) and free the header.

Note: this is called from a markReplacedFiles iteration, and must preserve the "join key" (i.e. offset) for the header.

Parameters:
midatabase iterator
dbiindex database handle
Returns:
0 on success

Definition at line 1959 of file rpmdb.c.

References _, _free(), blockSignals(), __db_dbt::data, DB_KEYLAST, headerCheck(), headerFree(), headerUnload(), rpmmi_s::mi_dbc, rpmmi_s::mi_h, rpmmi_s::mi_modified, rpmmi_s::mi_prevoffset, rpmmi_s::mi_ts, rpmlog(), RPMLOG_DEBUG, RPMLOG_ERR, RPMRC_FAIL, RPMRC_NOTFOUND, rpmtsCleanDig(), rpmtsDig(), __db_dbt::size, tagName(), UINT32_T, and unblockSignals().

Referenced by rpmmiFini(), and rpmmiNext().

static int mireCmp ( const void *  a,
const void *  b 
) [static]

Compare iterator selectors by rpm tag (qsort/bsearch).

Parameters:
a1st iterator selector
b2nd iterator selector
Returns:
result of comparison

Definition at line 2100 of file rpmdb.c.

Referenced by rpmmiAddPattern().

static char* mireDup ( rpmTag  tag,
rpmMireMode modep,
const char *  pattern 
) [static]

Copy pattern, escaping for appropriate mode.

Parameters:
tagrpm tag
Return values:
modeptype of pattern match
Parameters:
patternpattern to duplicate
Returns:
duplicated pattern

Definition at line 2116 of file rpmdb.c.

References RPMMIRE_DEFAULT, RPMMIRE_GLOB, RPMMIRE_REGEX, RPMMIRE_STRCMP, RPMTAG_BASENAMES, RPMTAG_DIRNAMES, xmalloc(), and xstrdup().

Referenced by rpmmiAddPattern().

static int mireSkip ( const rpmmi  mi) [static]
static unsigned char nibble ( char  c) [inline, static]

Convert hex to binary nibble.

Parameters:
chex character
Returns:
binary nibble

Definition at line 136 of file rpmdb.c.

Referenced by rpmdbAdd(), and rpmdbRemove().

static pbm_set* PBM_REALLOC ( pbm_set **  sp,
int *  odp,
int  nd 
) [inline, static]

Reallocate a bit map.

Return values:
spaddress of bit map pointer
odpno. of bits in map
Parameters:
nddesired no. of bits

Definition at line 111 of file rpmdb.c.

References __PBM_BITS, __PBM_IX, __PBM_NBITS, and xrealloc().

Referenced by rpmmiNext().

static const char* queryHeader ( Header  h,
const char *  qfmt 
) [inline, static]

Return header query string.

Warning:
Only compound header extensions are available here.
Parameters:
hheader
qfmtheader sprintf format
Returns:
header query string

Definition at line 860 of file rpmdb.c.

References _, headerCompoundFormats, headerSprintf(), rpmlog(), and RPMLOG_ERR.

Referenced by rpmdbExportInfo().

int rpmdbBlockDBI ( rpmdb  db,
int  tag 
)

Block access to a single database index.

Parameters:
dbrpm database
tagrpm tag (negative to block)
Returns:
0 on success

Definition at line 974 of file rpmdb.c.

Referenced by rpmgiNext().

int rpmdbCloseDBI ( rpmdb  db,
int  tag 
)

Close a single database index.

Parameters:
dbrpm database
tagrpm tag
Returns:
0 on success

Definition at line 992 of file rpmdb.c.

Referenced by rpmtsCheck().

static int rpmdbExportInfo ( rpmdb  db,
Header  h,
int  adding 
) [static]

Write added/removed header info.

Parameters:
dbrpm database
hheader
addingadding an rpmdb header?
Returns:
0 on success

Definition at line 882 of file rpmdb.c.

References _free(), alloca(), Fclose(), Fopen(), headerGet(), _HE_s::p, rpmDataType_u::ptr, queryHeader(), rpmGetPath(), rpmlog(), RPMLOG_DEBUG, RPMTAG_INSTALLTID, _HE_s::tag, rpmDataType_u::ui32p, Unlink(), and Utime().

Referenced by rpmdbNew().

static int rpmdbFindByFile ( rpmdb  db,
const char *  filespec,
DBT key,
DBT data,
dbiIndexSet matches 
) [static]
static rpmdb rpmdbGetPool ( rpmioPool  pool) [static]

Definition at line 930 of file rpmdb.c.

References _rpmdb_debug, _rpmdbPool, rpmioGetPool(), and rpmioNewPool().

Referenced by rpmdbNew().

static int rpmdbGrowIterator ( rpmmi  mi,
int  fpNum,
unsigned int  exclude,
unsigned int  tag 
) [static]
static int rpmdbMoveDatabase ( const char *  prefix,
const char *  olddbpath,
int  _olddbapi,
const char *  newdbpath,
int  _newdbapi,
const tagStore_t  dbiTags,
size_t  dbiNTags 
) [static]
rpmdb rpmdbNew ( const char *  root,
const char *  home,
int  mode,
int  perms,
int  flags 
)
int rpmdbOpenDatabase ( const char *  prefix,
const char *  dbpath,
int  _dbapi,
rpmdb dbp,
int  mode,
int  perms,
int  flags 
)
static int rpmdbRemoveDatabase ( const char *  prefix,
const char *  dbpath,
int  _dbapi,
const tagStore_t  dbiTags,
size_t  dbiNTags 
) [static]

Definition at line 3902 of file rpmdb.c.

References _free(), Rmdir(), rpmGetPath(), rpmioFileExists(), snprintf(), tagName(), and Unlink().

Referenced by rpmdbRebuild().

static void rpmdbSortIterator ( rpmmi  mi) [static]

Definition at line 2671 of file rpmdb.c.

References hdrNumCmp(), rpmmi_s::mi_set, rpmmi_s::mi_sorted, and rpm_mergesort().

Referenced by rpmdbFindFpList().

static const char* rpmdbURIPath ( const char *  uri) [static]

Return macro expanded absolute path to rpmdb.

Parameters:
uridesired path
Returns:
macro expanded absolute path

Definition at line 1113 of file rpmdb.c.

References _free(), PATH_MAX, Realpath(), rpmGetPath(), stpncpy(), URL_IS_DASH, URL_IS_FTP, URL_IS_HKP, URL_IS_HTTP, URL_IS_HTTPS, URL_IS_PATH, URL_IS_UNKNOWN, and urlPath().

Referenced by rpmdbNew().

static int rpmioFileExists ( const char *  urlfn) [static]

Check if file exists using stat(2).

Parameters:
urlfnfile name (may be URL)
Returns:
1 if file exists, 0 if not

Definition at line 3873 of file rpmdb.c.

References Stat(), URL_IS_DASH, URL_IS_FTP, URL_IS_HKP, URL_IS_HTTP, URL_IS_HTTPS, URL_IS_PATH, URL_IS_UNKNOWN, and urlPath().

Referenced by rpmdbMoveDatabase(), and rpmdbRemoveDatabase().

static void rpmmiFini ( void *  _mi) [static]
static int rpmmiGet ( dbiIndex  dbi,
DBC dbcursor,
DBT kp,
DBT vp,
unsigned int  flags 
) [static]

Definition at line 2454 of file rpmdb.c.

References _rpmmi_usermem, __db_dbt::data, DB_SET, errno, __db_dbt::flags, and __db_dbt::size.

Referenced by rpmmiNext().

static rpmmi rpmmiGetPool ( rpmioPool  pool) [static]

Definition at line 2068 of file rpmdb.c.

References _rpmmiPool, rpmioGetPool(), rpmioNewPool(), and rpmmiFini().

Referenced by rpmmiInit().

void rpmtsCleanDig ( void *  ts)
pgpDig rpmtsDig ( void *  ts)
static int set2dbt ( dbiIndex  dbi,
DBT data,
dbiIndexSet  set 
) [static]

Convert index set to database representation.

Parameters:
dbiindex database handle
dataretrieved data
setindex set
Returns:
0 on success

Definition at line 557 of file rpmdb.c.

References _DBSWAP, __db_dbt::data, set(), __db_dbt::size, _dbswap::ui, UINT32_T, and xmalloc().

Referenced by rpmdbAdd(), and rpmdbRemove().

static unsigned taghash ( const char *  s) [inline, static]

Return a tagnum with hash on the (directory) path in upper 16 bits.

Parameters:
s(directory) path
Returns:
tagnum with (directory) path hash

Definition at line 1409 of file rpmdb.c.

Referenced by rpmdbAdd(), rpmdbFindByFile(), and rpmdbFindFpList().

static int unblockSignals ( rpmdb  db,
sigset_t *  oldMask 
) [static]

Restore signal mask.

Parameters:
dbrpm database
oldMaskprevious sigset
Returns:
0 on success

Definition at line 845 of file rpmdb.c.

References rpmdbCheckSignals().

Referenced by miFreeHeader(), rpmdbAdd(), rpmdbMoveDatabase(), and rpmdbRemove().


Variable Documentation

int _db_filter_dups = 0 [static]

Definition at line 66 of file rpmdb.c.

Referenced by rpmdbNew(), and rpmdbRebuild().

int _db_tagged_file_indices = 1 [static]

Definition at line 72 of file rpmdb.c.

Referenced by rpmdbAdd(), rpmdbFindByFile(), rpmdbFindFpList(), and rpmdbGrowIterator().

int _db_tagged_findbyfile = 1 [static]

Definition at line 77 of file rpmdb.c.

Referenced by rpmdbFindByFile().

int _rebuildinprogress = 0 [static]

Definition at line 64 of file rpmdb.c.

Referenced by dbiOpen(), and rpmdbRebuild().

int _rpmdb_debug = 0

Definition at line 61 of file rpmdb.c.

Referenced by dbiOpen(), rpmdbClose(), rpmdbGetPool(), and rpmdbNew().

Definition at line 928 of file rpmdb.c.

Referenced by rpmcliFini(), and rpmdbGetPool().

int _rpmmi_debug = 0

Definition at line 2063 of file rpmdb.c.

int _rpmmi_usermem = 1 [static]

Definition at line 2452 of file rpmdb.c.

Referenced by rpmmiGet(), and rpmmiNext().

Definition at line 2066 of file rpmdb.c.

Referenced by rpmcliFini(), and rpmmiGetPool().

struct _dbiVec* mydbvecs[] [static]
Initial value:
 {
     NULL ,  NULL ,  NULL ,  NULL ,  NULL , NULL
}

Definition at line 315 of file rpmdb.c.

rpmdb rpmdbRock [static]

Definition at line 752 of file rpmdb.c.

Referenced by rpmdbClose(), and rpmdbOpenDatabase().

rpmmi rpmmiRock [static]

Definition at line 755 of file rpmdb.c.

Referenced by rpmmiFini(), and rpmmiInit().