rpm  4.5
Data Structures | Macros | Typedefs | Functions | Variables
#include "system.h"
#include <sys/file.h>
#include <rpmio.h>
#include <rpmpgp.h>
#include <rpmurl.h>
#include <rpmmacro.h>
#include <rpmsq.h>
#include <rpmevr.h>
#include "rpmdb.h"
#include "fprint.h"
#include "legacy.h"
#include "header_internal.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  _rpmdbMatchIterator
 

Macros

#define _USE_COPY_LOAD   /* XXX don't use DB_DBT_MALLOC (yet) */
 
#define _RPMEVR_INTERNAL   /* XXX isInstallPrereq */
 
#define _RPMDB_INTERNAL
 
#define _MIRE_INTERNAL
 
#define _DB_TAGGED_FILE_INDICES   1
 
#define _DBI_FLAGS   0
 
#define _DBI_PERMS   0644
 
#define _DBI_MAJOR   -1
 
#define __PBM_NBITS   (8 * sizeof (__pbm_bits))
 
#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, sizeof(__pbm_bits))
 
#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 _VARLIBRPM   "/var/lib/rpm"
 
#define _RECNUM   rpmdbGetIteratorOffset(mi)
 

Typedefs

typedef unsigned int __pbm_bits
 

Functions

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 int dbiTagToDbix (rpmdb db, int rpmtag)
 Return dbi index used for rpm tag.
 
static void dbiTagsInit (int **dbiTagsP, int *dbiTagsMaxP)
 Initialize database (index, tag) tuple from configuration.
 
static const char * mapTagName (int value)
 Return (possibly renamed) tagName.
 
dbiIndex dbiOpen (rpmdb db, rpmTag rpmtag, 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.
 
int rpmdbOpenAll (rpmdb db)
 Open all database indices.
 
int rpmdbBlockDBI (rpmdb db, int rpmtag)
 Block access to a single database index.
 
int rpmdbCloseDBI (rpmdb db, int rpmtag)
 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)
 
rpmdb XrpmdbUnlink (rpmdb db, const char *msg, const char *fn, unsigned ln)
 
rpmdb XrpmdbLink (rpmdb db, const char *msg, const char *fn, unsigned ln)
 
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 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 (rpmdbMatchIterator mi, dbiIndex dbi)
 Rewrite a header into packages (if necessary) and free the header.
 
rpmdbMatchIterator rpmdbFreeIterator (rpmdbMatchIterator mi)
 Destroy rpm database iterator.
 
unsigned int rpmdbGetIteratorOffset (rpmdbMatchIterator mi)
 Return header join key for current position of rpm database iterator.
 
unsigned int rpmdbGetIteratorFileNum (rpmdbMatchIterator mi)
 
int rpmdbGetIteratorCount (rpmdbMatchIterator 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 rpmdbSetIteratorRE (rpmdbMatchIterator mi, rpmTag tag, rpmMireMode mode, const char *pattern)
 Add pattern to iterator selector.
 
static int mireSkip (const rpmdbMatchIterator mi)
 Return iterator selector match.
 
int rpmdbSetIteratorRewrite (rpmdbMatchIterator mi, int rewrite)
 Prepare iterator for lazy writes.
 
int rpmdbSetIteratorModified (rpmdbMatchIterator mi, int modified)
 Modify iterator to mark header for lazy write on release.
 
int rpmdbSetHdrChk (rpmdbMatchIterator mi, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg))
 Modify iterator to verify retrieved header blobs.
 
Header rpmdbNextIterator (rpmdbMatchIterator mi)
 Return next package header from iteration.
 
static void rpmdbSortIterator (rpmdbMatchIterator mi)
 
static int rpmdbGrowIterator (rpmdbMatchIterator mi, int fpNum, unsigned int exclude, unsigned int tag)
 
int rpmdbPruneIterator (rpmdbMatchIterator mi, int *hdrNums, int nHdrNums, int sorted)
 Remove items from set of package instances to iterate.
 
int rpmdbAppendIterator (rpmdbMatchIterator mi, const int *hdrNums, int nHdrNums)
 Append items to set of package instances to iterate.
 
rpmdbMatchIterator rpmdbInitIterator (rpmdb db, rpmTag rpmtag, const void *keyp, size_t keylen)
 Return database iterator.
 
int rpmdbRemove (rpmdb db, int rid, unsigned int hdrNum, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg))
 Remove package header from rpm database and indices.
 
int rpmdbAdd (rpmdb db, int iid, Header h, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg))
 Add package header to rpm database and indices.
 
int rpmdbFindFpList (rpmdb db, fingerPrint *fpList, dbiIndexSet *matchList, int numItems, unsigned int exclude)
 Find fingerprint matches in database.
 
static int rpmioFileExists (const char *urlfn)
 Check if file esists using stat(2).
 
static int rpmdbRemoveDatabase (const char *prefix, const char *dbpath, int _dbapi, const int *dbiTags, int dbiTagsMax)
 
static int rpmdbMoveDatabase (const char *prefix, const char *olddbpath, int _olddbapi, const char *newdbpath, int _newdbapi, const int *dbiTags, int dbiTagsMax)
 
int rpmdbRebuild (const char *prefix, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg))
 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 struct _dbiVec * mydbvecs []
 
static rpmdb rpmdbRock
 
static rpmdbMatchIterator rpmmiRock
 
static struct rpmdb_s dbTemplate
 

Macro Definition Documentation

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

Definition at line 65 of file rpmdb.c.

Referenced by PBM_REALLOC().

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

Definition at line 58 of file rpmdb.c.

Referenced by PBM_REALLOC().

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

Definition at line 59 of file rpmdb.c.

#define __PBM_NBITS   (8 * sizeof (__pbm_bits))

Definition at line 57 of file rpmdb.c.

#define _DB_ERRPFX   "rpmdb"

Definition at line 874 of file rpmdb.c.

Referenced by rpmdbNew().

#define _DB_FLAGS   0

Definition at line 869 of file rpmdb.c.

#define _DB_HOME   "%{?_dbpath}"

Definition at line 868 of file rpmdb.c.

Referenced by rpmdbNew().

#define _DB_MAJOR   -1

Definition at line 873 of file rpmdb.c.

#define _DB_MODE   0

Definition at line 870 of file rpmdb.c.

#define _DB_PERMS   0644

Definition at line 871 of file rpmdb.c.

#define _DB_ROOT   "/"

Definition at line 867 of file rpmdb.c.

Referenced by rpmdbNew().

#define _DB_TAGGED_FILE_INDICES   1

Definition at line 45 of file rpmdb.c.

#define _DBI_FLAGS   0

Definition at line 49 of file rpmdb.c.

#define _DBI_MAJOR   -1

Definition at line 51 of file rpmdb.c.

#define _DBI_PERMS   0644

Definition at line 50 of file rpmdb.c.

#define _DBSWAP (   _a)
Value:
/*@-bounds@*/ \
{ 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; \
/*@=bounds@*/ \
}

Definition at line 407 of file rpmdb.c.

Referenced by dbt2set(), rpmdbAdd(), rpmdbInitIterator(), rpmdbNextIterator(), rpmdbRemove(), and set2dbt().

#define _MIRE_INTERNAL

Definition at line 21 of file rpmdb.c.

#define _RECNUM   rpmdbGetIteratorOffset(mi)

Referenced by rpmdbRebuild().

#define _RPMDB_INTERNAL

Definition at line 20 of file rpmdb.c.

#define _RPMEVR_INTERNAL   /* XXX isInstallPrereq */

Definition at line 17 of file rpmdb.c.

#define _USE_COPY_LOAD   /* XXX don't use DB_DBT_MALLOC (yet) */

Definition at line 7 of file rpmdb.c.

Referenced by rpmdbNextIterator().

#define _VARLIBRPM   "/var/lib/rpm"

Referenced by rpmdbNew().

#define DB1vec   NULL

Definition at line 236 of file rpmdb.c.

#define DB2vec   NULL

Definition at line 237 of file rpmdb.c.

#define DB3vec   NULL

Definition at line 247 of file rpmdb.c.

#define PBM_ALLOC (   d)    xcalloc(__PBM_IX (d) + 1, sizeof(__pbm_bits))

Definition at line 72 of file rpmdb.c.

Referenced by dbiOpen().

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

Definition at line 69 of file rpmdb.c.

#define PBM_FREE (   s)    _free(s);

Definition at line 67 of file rpmdb.c.

Referenced by rpmdbClose().

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

Definition at line 70 of file rpmdb.c.

Referenced by rpmdbNextIterator().

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

Definition at line 68 of file rpmdb.c.

Referenced by rpmdbNextIterator().

#define SQLITEvec   NULL

Definition at line 259 of file rpmdb.c.

Typedef Documentation

typedef unsigned int __pbm_bits

Definition at line 55 of file rpmdb.c.

Function Documentation

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 762 of file rpmdb.c.

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

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 569 of file rpmdb.c.

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

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

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 1717 of file rpmdb.c.

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

Referenced by rpmdbInitIterator().

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 1617 of file rpmdb.c.

References _, dbiFreeIndexSet(), dbiIndexRecordOffset(), dbiIndexSetCount(), dbt2set(), mapTagName(), rpmdbFreeIterator(), RPMDBI_PACKAGES, rpmdbInitIterator(), rpmdbNextIterator(), rpmdbSetIteratorRE(), RPMERR_DBGETINDEX, rpmError, RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, RPMTAG_RELEASE, and RPMTAG_VERSION.

Referenced by dbiFindByLabel().

dbiIndexSet dbiFreeIndexSet ( dbiIndexSet  set)
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 393 of file rpmdb.c.

References xcalloc().

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

unsigned int dbiIndexRecordFileNumber ( dbiIndexSet  set,
int  recno 
)

Definition at line 645 of file rpmdb.c.

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

unsigned int dbiIndexRecordOffset ( dbiIndexSet  set,
int  recno 
)

Definition at line 640 of file rpmdb.c.

Referenced by dbiFindMatches(), rpmdbFindByFile(), rpmdbNextIterator(), and rpmtsRun().

unsigned int dbiIndexSetCount ( dbiIndexSet  set)

Definition at line 635 of file rpmdb.c.

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

dbiIndex dbiOpen ( rpmdb  db,
rpmTag  rpmtag,
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 608 of file rpmdb.c.

References hdrNumCmp().

Referenced by rpmdbPruneIterator(), and rpmdbRemove().

void* dbiStatsAccumulator ( dbiIndex  dbi,
int  opx 
)

Definition at line 1805 of file rpmdb.c.

static void dbiTagsInit ( int **  dbiTagsP,
int *  dbiTagsMaxP 
)
static

Initialize database (index, tag) tuple from configuration.

Definition at line 163 of file rpmdb.c.

References _, _free(), RPMDBI_PACKAGES, rpmExpand(), RPMMESS_WARNING, rpmMessage, tagValue(), xcalloc(), xisspace(), xrealloc(), and xstrdup().

Referenced by rpmdbNew(), and rpmdbRebuild().

static int dbiTagToDbix ( rpmdb  db,
int  rpmtag 
)
static

Return dbi index used for rpm tag.

Parameters
dbrpm database
rpmtagrpm header tag
Returns
dbi index, -1 on error

Definition at line 143 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 422 of file rpmdb.c.

References _DBSWAP, _dbswap::ui, and xmalloc().

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

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

Definition at line 553 of file rpmdb.c.

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

static const char* mapTagName ( int  value)
static

Return (possibly renamed) tagName.

Handles Filedigests -> Filemd5s renaming.

Parameters
valuetag value
Returns
tag string

Definition at line 275 of file rpmdb.c.

References tagName().

Referenced by dbiFindMatches(), dbiOpen(), miFreeHeader(), rpmdbAdd(), rpmdbCount(), rpmdbFindByFile(), rpmdbGrowIterator(), rpmdbInitIterator(), rpmdbMoveDatabase(), rpmdbRemove(), and rpmdbRemoveDatabase().

static int miFreeHeader ( rpmdbMatchIterator  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 1831 of file rpmdb.c.

References _, _free(), blockSignals(), HEADER_MAGIC_NO, headerFree(), headerSizeof(), headerUnload(), mapTagName(), _rpmdbMatchIterator::mi_data, _rpmdbMatchIterator::mi_dbc, _rpmdbMatchIterator::mi_h, _rpmdbMatchIterator::mi_hdrchk, _rpmdbMatchIterator::mi_key, _rpmdbMatchIterator::mi_modified, _rpmdbMatchIterator::mi_prevoffset, _rpmdbMatchIterator::mi_ts, RPMERR_DBPUTINDEX, rpmError, RPMMESS_DEBUG, RPMMESS_ERROR, rpmMessage, RPMRC_FAIL, RPMRC_NOTFOUND, and unblockSignals().

Referenced by rpmdbFreeIterator(), and rpmdbNextIterator().

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 1951 of file rpmdb.c.

Referenced by rpmdbSetIteratorRE().

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 1965 of file rpmdb.c.

References RPMTAG_BASENAMES, RPMTAG_DIRNAMES, xmalloc(), and xstrdup().

Referenced by rpmdbSetIteratorRE().

static int mireSkip ( const rpmdbMatchIterator  mi)
static
static unsigned char nibble ( char  c)
inlinestatic

Convert hex to binary nibble.

Parameters
chex character
Returns
binary nibble

Definition at line 108 of file rpmdb.c.

Referenced by rpmdbAdd(), and rpmdbRemove().

static pbm_set* PBM_REALLOC ( pbm_set **  sp,
int *  odp,
int  nd 
)
inlinestatic

Reallocate a bit map.

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

Definition at line 81 of file rpmdb.c.

References __PBM_BITS, __PBM_IX, and xrealloc().

Referenced by rpmdbNextIterator().

static const char* queryHeader ( Header  h,
const char *  qfmt 
)
inlinestatic

Return header query string.

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

Definition at line 800 of file rpmdb.c.

References _, headerDefaultFormats, headerSprintf(), RPMERR_QFMT, rpmError, and rpmTagTable.

Referenced by rpmdbExportInfo().

int rpmdbBlockDBI ( rpmdb  db,
int  rpmtag 
)

Block access to a single database index.

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

Definition at line 912 of file rpmdb.c.

Referenced by rpmgiNext().

int rpmdbCloseDBI ( rpmdb  db,
int  rpmtag 
)

Close a single database index.

Parameters
dbrpm database
rpmtagrpm tag
Returns
0 on success

Definition at line 930 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 822 of file rpmdb.c.

References _free(), Fclose(), Fopen(), headerGetEntry(), queryHeader(), rpmGetPath(), RPMMESS_DEBUG, rpmMessage, RPMTAG_INSTALLTIME, Unlink(), and Utime().

Referenced by rpmdbNew().

static int rpmdbFindByFile ( rpmdb  db,
const char *  filespec,
DBT *  key,
DBT *  data,
dbiIndexSet matches 
)
static
unsigned int rpmdbGetIteratorFileNum ( rpmdbMatchIterator  mi)

Definition at line 1937 of file rpmdb.c.

References _rpmdbMatchIterator::mi_filenum.

Referenced by rpmtsFindPubkey().

static int rpmdbGrowIterator ( rpmdbMatchIterator  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 int *  dbiTags,
int  dbiTagsMax 
)
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 int *  dbiTags,
int  dbiTagsMax 
)
static

Definition at line 3710 of file rpmdb.c.

References alloca(), mapTagName(), rpmCleanPath(), rpmioFileExists(), and Unlink().

Referenced by rpmdbRebuild().

static void rpmdbSortIterator ( rpmdbMatchIterator  mi)
static
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 1042 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 esists using stat(2).

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

Definition at line 3675 of file rpmdb.c.

References errno, 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 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 492 of file rpmdb.c.

References _DBSWAP, _dbswap::ui, and xmalloc().

Referenced by rpmdbAdd(), and rpmdbRemove().

static unsigned taghash ( const char *  s)
inlinestatic

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 1362 of file rpmdb.c.

Referenced by rpmdbAdd(), 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 785 of file rpmdb.c.

References rpmdbCheckSignals().

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

rpmdb XrpmdbLink ( rpmdb  db,
const char *  msg,
const char *  fn,
unsigned  ln 
)
Todo:
Remove debugging entry from the ABI.

Definition at line 1277 of file rpmdb.c.

References _rpmdb_debug.

rpmdb XrpmdbUnlink ( rpmdb  db,
const char *  msg,
const char *  fn,
unsigned  ln 
)
Todo:
Remove debugging entry from the ABI.

Definition at line 1267 of file rpmdb.c.

References _rpmdb_debug.

Variable Documentation

int _db_filter_dups = 0
static

Definition at line 40 of file rpmdb.c.

Referenced by rpmdbNew(), and rpmdbRebuild().

int _db_tagged_file_indices = 1
static

Definition at line 47 of file rpmdb.c.

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

int _rebuildinprogress = 0
static

Definition at line 38 of file rpmdb.c.

Referenced by dbiOpen(), and rpmdbRebuild().

int _rpmdb_debug = 0

Definition at line 35 of file rpmdb.c.

Referenced by dbiOpen(), rpmdbNew(), XrpmdbLink(), and XrpmdbUnlink().

struct rpmdb_s dbTemplate
static
Initial value:
= {
"/" , "%{?_dbpath}" , 0 , 0 , 0644 ,
-1 , "rpmdb"
}

Definition at line 878 of file rpmdb.c.

Referenced by rpmdbNew().

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

Definition at line 264 of file rpmdb.c.

rpmdb rpmdbRock
static

Definition at line 692 of file rpmdb.c.

Referenced by rpmdbClose(), and rpmdbOpenDatabase().

rpmdbMatchIterator rpmmiRock
static

Definition at line 695 of file rpmdb.c.

Referenced by rpmdbFreeIterator(), and rpmdbInitIterator().