rpm  5.2.1
Data Structures | Macros | 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
 

Macros

#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. More...
 
static unsigned char nibble (char c)
 Convert hex to binary nibble. More...
 
static char * bin2hex (const void *data, size_t size)
 Convert binary blob to printable hex string. More...
 
static size_t dbiTagToDbix (rpmdb db, rpmTag tag)
 Return dbi index used for rpm tag. More...
 
static void dbiTagsInit (tagStore_t *dbiTagsP, size_t *dbiNTagsP)
 Initialize database (index, tag) tuple from configuration. More...
 
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. More...
 
static int dbt2set (dbiIndex dbi, DBT *data, dbiIndexSet *setp)
 Convert retrieved data to index set. More...
 
static int set2dbt (dbiIndex dbi, DBT *data, dbiIndexSet set)
 Convert index set to database representation. More...
 
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. More...
 
static int dbiPruneSet (dbiIndexSet set, void *recs, int nrecs, size_t recsize, int sorted)
 Remove element(s) from set of index database items. More...
 
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. More...
 
int rpmdbCheckSignals (void)
 Check for and exit on termination signals. More...
 
static int blockSignals (rpmdb db, sigset_t *oldMask)
 Block all signals, returning previous signal mask. More...
 
static int unblockSignals (rpmdb db, sigset_t *oldMask)
 Restore signal mask. More...
 
static const char * queryHeader (Header h, const char *qfmt)
 Return header query string. More...
 
static int rpmdbExportInfo (rpmdb db, Header h, int adding)
 Write added/removed header info. More...
 
static rpmdb rpmdbGetPool (rpmioPool pool)
 
int rpmdbOpenAll (rpmdb db)
 Open all database indices. More...
 
int rpmdbBlockDBI (rpmdb db, int tag)
 Block access to a single database index. More...
 
int rpmdbCloseDBI (rpmdb db, int tag)
 Close a single database index. More...
 
int rpmdbClose (rpmdb db)
 Close all database indices and free rpmdb. More...
 
int rpmdbSync (rpmdb db)
 Sync all database indices. More...
 
static const char * rpmdbURIPath (const char *uri)
 Return macro expanded absolute path to rpmdb. More...
 
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. More...
 
int rpmdbInit (const char *prefix, int perms)
 Initialize database. More...
 
int rpmdbVerifyAllDBI (rpmdb db)
 Verify all database components. More...
 
int rpmdbVerify (const char *prefix)
 Open and verify all database components. More...
 
static unsigned taghash (const char *s)
 Return a tagnum with hash on the (directory) path in upper 16 bits. More...
 
static int dbiIntersect (unsigned int tag, dbiIndexSet dnset, dbiIndexSet bnset, dbiIndexSet *matches)
 Return the intersection of dirName <=> baseName index sets. More...
 
static int rpmdbFindByFile (rpmdb db, const char *filespec, DBT *key, DBT *data, dbiIndexSet *matches)
 Find file matches in database. More...
 
int rpmdbCount (rpmdb db, rpmTag tag, const void *keyp, size_t keylen)
 Return number of instances of key in a tag index. More...
 
int rpmdbCountPackages (rpmdb db, const char *name)
 Return number of instances of package in Name index. More...
 
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. More...
 
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. More...
 
void * dbiStatsAccumulator (dbiIndex dbi, int opx)
 
static int miFreeHeader (rpmmi mi, dbiIndex dbi)
 Rewrite a header into packages (if necessary) and free the header. More...
 
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. More...
 
unsigned int rpmmiFilenum (rpmmi mi)
 Return header tag index join key for current position of rpmdb iterator. More...
 
int rpmmiCount (rpmmi mi)
 Return number of elements in rpm database iterator. More...
 
static int mireCmp (const void *a, const void *b)
 Compare iterator selectors by rpm tag (qsort/bsearch). More...
 
static char * mireDup (rpmTag tag, rpmMireMode *modep, const char *pattern)
 Copy pattern, escaping for appropriate mode. More...
 
int rpmmiAddPattern (rpmmi mi, rpmTag tag, rpmMireMode mode, const char *pattern)
 Add pattern to iterator selector. More...
 
static int mireSkip (const rpmmi mi)
 Return iterator selector match. More...
 
int rpmmiSetRewrite (rpmmi mi, int rewrite)
 Prepare iterator for lazy writes. More...
 
int rpmmiSetModified (rpmmi mi, int modified)
 Modify iterator to mark header for lazy write on release. More...
 
int rpmmiSetHdrChk (rpmmi mi, rpmts ts)
 Modify iterator to verify retrieved header blobs. More...
 
static int rpmmiGet (dbiIndex dbi, DBC *dbcursor, DBT *kp, DBT *vp, unsigned int flags)
 
Header rpmmiNext (rpmmi mi)
 Return next package header from iteration. More...
 
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. More...
 
int rpmmiGrow (rpmmi mi, const int *hdrNums, int nHdrNums)
 Append items to set of package instances to iterate. More...
 
rpmmi rpmmiInit (rpmdb db, rpmTag tag, const void *keyp, size_t keylen)
 Return database iterator. More...
 
int rpmdbMireApply (rpmdb db, rpmTag tag, rpmMireMode mode, const char *pat, const char ***argvp)
 Return array of keys matching a pattern. More...
 
int rpmdbRemove (rpmdb db, int rid, unsigned int hdrNum, rpmts ts)
 Remove package header from rpm database and indices. More...
 
int rpmdbAdd (rpmdb db, int iid, Header h, rpmts ts)
 Add package header to rpm database and indices. More...
 
int rpmdbFindFpList (void *_db, fingerPrint *fpList, void *_matchList, int numItems, unsigned int exclude)
 Find fingerprint matches in database. More...
 
static int rpmioFileExists (const char *urlfn)
 Check if file exists using stat(2). More...
 
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. More...
 

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
 

Macro Definition 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.

#define _RPMTAG_INTERNAL

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 
)
inlinestatic

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

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 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)
inlinestatic

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 
)
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 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 
)
inlinestatic

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

rpmioPool _rpmdbPool

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

rpmioPool _rpmmiPool

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