#include "system.h"
#include <sys/file.h>
#include <signal.h>
#include <sys/signal.h>
#include <fnmatch.h>
#include <regex.h>
#include <rpmio_internal.h>
#include <rpmmacro.h>
#include "rpmdb.h"
#include "fprint.h"
#include "legacy.h"
#include "header_internal.h"
#include "debug.h"
Go to the source code of this file.
Data Structures | |
union | _dbswap |
struct | _rpmdbMatchIterator |
struct | miRE_s |
struct | pbm_set |
struct | sigtbl_s |
struct | skipDir_s |
Defines | |
#define | _USE_COPY_LOAD |
#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 &db3vec |
#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 | _skip(_dn) { sizeof(_dn)-1, (_dn) } |
#define | _RECNUM rpmdbGetIteratorOffset(mi) |
Typedefs | |
typedef unsigned int | __pbm_bits |
typedef miRE_s * | miRE |
Functions | |
pbm_set * | PBM_REALLOC (pbm_set **sp, int *odp, int nd) |
Reallocate a bit map. More... | |
unsigned char | nibble (char c) |
Convert hex to binary nibble. More... | |
int | dbiTagToDbix (int rpmtag) |
Return dbi index used for rpm tag. More... | |
void | dbiTagsInit (void) |
Initialize database (index, tag) tuple from configuration. More... | |
dbiIndex | dbiOpen (rpmdb db, rpmTag rpmtag, unsigned int flags) |
dbiIndexItem | dbiIndexNewItem (unsigned int hdrNum, unsigned int tagNum) |
Create and initialize item for index database set. More... | |
int | dbt2set (dbiIndex dbi, DBT *data, dbiIndexSet *setp) |
Convert retrieved data to index set. More... | |
int | set2dbt (dbiIndex dbi, DBT *data, dbiIndexSet set) |
Convert index set to database representation. More... | |
int | hdrNumCmp (const void *one, const void *two) |
int | dbiAppendSet (dbiIndexSet set, const void *recs, int nrecs, size_t recsize, int sortset) |
Append element(s) to set of index database items. More... | |
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) |
void | handler (int signum) |
int | enableSignals (void) |
Enable all signal handlers. More... | |
int | rpmdbCheckSignals (void) |
int | disableSignals (void) |
Disable all signal handlers. More... | |
int | blockSignals (rpmdb db, sigset_t *oldMask) |
Block all signals, returning previous signal mask. More... | |
int | unblockSignals (rpmdb db, sigset_t *oldMask) |
Restore signal mask. More... | |
int | rpmdbOpenAll (rpmdb db) |
int | rpmdbCloseDBI (rpmdb db, int rpmtag) |
Close a single database index. More... | |
int | rpmdbClose (rpmdb db) |
int | rpmdbSync (rpmdb db) |
rpmdb | newRpmdb (const char *root, const char *home, int mode, int perms, int flags) |
int | openDatabase (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) |
int | rpmdbInit (const char *prefix, int perms) |
int | rpmdbVerify (const char *prefix) |
int | rpmdbFindByFile (rpmdb db, const char *filespec, DBT *key, DBT *data, dbiIndexSet *matches) |
Find file matches in database. More... | |
int | rpmdbCountPackages (rpmdb db, const char *name) |
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... | |
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... | |
int | miFreeHeader (rpmdbMatchIterator mi, dbiIndex dbi) |
Rewrite a header into packages (if necessary) and free the header. More... | |
rpmdbMatchIterator | rpmdbFreeIterator (rpmdbMatchIterator mi) |
unsigned int | rpmdbGetIteratorOffset (rpmdbMatchIterator mi) |
unsigned int | rpmdbGetIteratorFileNum (rpmdbMatchIterator mi) |
int | rpmdbGetIteratorCount (rpmdbMatchIterator mi) |
int | miregexec (miRE mire, const char *val) |
Return pattern match. More... | |
int | mireCmp (const void *a, const void *b) |
Compare iterator selectors by rpm tag (qsort/bsearch). More... | |
char * | mireDup (rpmTag tag, rpmMireMode *modep, const char *pattern) |
Copy pattern, escaping for appropriate mode. More... | |
int | rpmdbSetIteratorRE (rpmdbMatchIterator mi, rpmTag tag, rpmMireMode mode, const char *pattern) |
int | mireSkip (const rpmdbMatchIterator mi) |
Return iterator selector match. More... | |
int | rpmdbSetIteratorRewrite (rpmdbMatchIterator mi, int rewrite) |
int | rpmdbSetIteratorModified (rpmdbMatchIterator mi, int modified) |
int | rpmdbSetHdrChk (rpmdbMatchIterator mi, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg)) |
Header | rpmdbNextIterator (rpmdbMatchIterator mi) |
void | rpmdbSortIterator (rpmdbMatchIterator mi) |
int | rpmdbGrowIterator (rpmdbMatchIterator mi, int fpNum) |
int | rpmdbPruneIterator (rpmdbMatchIterator mi, int *hdrNums, int nHdrNums, int sorted) |
int | rpmdbAppendIterator (rpmdbMatchIterator mi, const int *hdrNums, int nHdrNums) |
rpmdbMatchIterator | rpmdbInitIterator (rpmdb db, rpmTag rpmtag, const void *keyp, size_t keylen) |
int | rpmdbRemove (rpmdb db, int rid, unsigned int hdrNum, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg)) |
int | rpmdbAdd (rpmdb db, int iid, Header h, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg)) |
int | skipDir (const char *dn) |
int | rpmdbFindFpList (rpmdb db, fingerPrint *fpList, dbiIndexSet *matchList, int numItems) |
int | rpmioFileExists (const char *urlfn) |
Check if file esists using stat(2). More... | |
int | rpmdbRemoveDatabase (const char *prefix, const char *dbpath, int _dbapi) |
int | rpmdbMoveDatabase (const char *prefix, const char *olddbpath, int _olddbapi, const char *newdbpath, int _newdbapi) |
int | rpmdbRebuild (const char *prefix, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg)) |
Variables | |
int | _rpmdb_debug = 0 |
int | _rebuildinprogress = 0 |
int | _db_filter_dups = 0 |
int * | dbiTags = NULL |
int | dbiTagsMax = 0 |
_dbiVec | db3vec |
_dbiVec * | mydbvecs [] |
sigset_t | caught |
sigtbl_s | satbl [] |
rpmdb | rpmdbRock |
rpmdb_s | dbTemplate |
skipDir_s | skipDirs [] |
Definition in file rpmdb.c.
|
Definition at line 78 of file rpmdb.c. Referenced by PBM_REALLOC. |
|
Definition at line 71 of file rpmdb.c. Referenced by PBM_REALLOC. |
|
|
|
|
|
Definition at line 786 of file rpmdb.c. Referenced by newRpmdb. |
|
|
|
Definition at line 780 of file rpmdb.c. Referenced by newRpmdb. |
|
|
|
|
|
|
|
Definition at line 779 of file rpmdb.c. Referenced by newRpmdb. |
|
|
|
|
|
|
|
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 85 of file rpmdb.c. Referenced by dbiOpen, findNextArg, and poptStripArg. |
|
|
|
Definition at line 80 of file rpmdb.c. Referenced by cleanOSE, poptFreeContext, poptResetContext, and rpmdbClose. |
|
Definition at line 83 of file rpmdb.c. Referenced by findNextArg, poptGetNextOpt, poptStrippedArgv, and rpmdbNextIterator. |
|
Definition at line 81 of file rpmdb.c. Referenced by findNextArg, poptStripArg, and rpmdbNextIterator. |
|
Definition at line 68 of file rpmdb.c. Referenced by PBM_REALLOC. |
|
|
|
Block all signals, returning previous signal mask.
Definition at line 750 of file rpmdb.c. References sigtbl_s::active, satbl, and sigtbl_s::signum. Referenced by miFreeHeader, rpmdbAdd, and rpmdbRemove. |
|
Append element(s) to set of index database items.
Definition at line 530 of file rpmdb.c. References hdrNumCmp, and xrealloc. Referenced by rpmdbAdd, rpmdbAppendIterator, rpmdbFindByFile, and rpmdbFindFpList. |
|
Lookup by name, name-version, and finally by name-version-release. Both version and release can be patterns.
Definition at line 1468 of file rpmdb.c. References alloca, dbiFindMatches, dbiFreeIndexSet, rpmRC, RPMRC_NOTFOUND, and stpcpy. Referenced by rpmdbInitIterator. |
|
Attempt partial matches on name[-version[-release]] strings.
Definition at line 1368 of file rpmdb.c. References _, dbiFreeIndexSet, dbiGet, dbiIndexRecordOffset, dbiIndexSetCount, dbt2set, rpmdbFreeIterator, RPMDBI_PACKAGES, rpmdbInitIterator, rpmdbNextIterator, rpmdbSetIteratorRE, RPMMIRE_DEFAULT, rpmRC, RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, RPMTAG_RELEASE, and RPMTAG_VERSION. Referenced by dbiFindByLabel. |
|
Create and initialize item for index database set.
Definition at line 358 of file rpmdb.c. References _dbiIndexItem::hdrNum, _dbiIndexItem::tagNum, and xcalloc. Referenced by rpmdbAdd, rpmdbFindByFile, and rpmdbRemove. |
|
Remove element(s) from set of index database items.
Definition at line 569 of file rpmdb.c. References hdrNumCmp. Referenced by rpmdbPruneIterator, and rpmdbRemove. |
|
Initialize database (index, tag) tuple from configuration.
Definition at line 173 of file rpmdb.c. References _, _free, dbiTags, dbiTagsMax, dbiTagToDbix, RPMDBI_PACKAGES, rpmExpand, tagValue, xcalloc, xisspace, xrealloc, and xstrdup. Referenced by openDatabase. |
|
Return dbi index used for rpm tag.
Definition at line 155 of file rpmdb.c. References dbiTags, and dbiTagsMax. Referenced by dbiOpen, and dbiTagsInit. |
|
Convert retrieved data to index set.
Definition at line 385 of file rpmdb.c. References _DBSWAP, _dbiIndexSet::count, dbiByteSwapped, _dbiIndexItem::fpNum, _dbiIndexItem::hdrNum, _dbiIndexSet::recs, _dbiIndexItem::tagNum, _dbswap::ui, and xmalloc. Referenced by dbiFindMatches, rpmdbAdd, rpmdbCountPackages, rpmdbFindByFile, rpmdbGrowIterator, rpmdbInitIterator, and rpmdbRemove. |
|
Disable all signal handlers.
Definition at line 727 of file rpmdb.c. References sigtbl_s::active, sigtbl_s::oact, satbl, and sigtbl_s::signum. Referenced by rpmdbClose. |
|
Enable all signal handlers.
Definition at line 668 of file rpmdb.c. References sigtbl_s::act, sigtbl_s::active, caught, sigtbl_s::oact, satbl, and sigtbl_s::signum. Referenced by openDatabase. |
|
Definition at line 648 of file rpmdb.c. References sigtbl_s::active, caught, satbl, and sigtbl_s::signum. |
|
Definition at line 514 of file rpmdb.c. Referenced by dbiAppendSet, dbiPruneSet, and rpmdbSortIterator. |
|
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.
Definition at line 1606 of file rpmdb.c. References _, _free, blockSignals, dbiPut, dbiSync, HEADER_MAGIC_NO, headerFree, headerSizeof, headerUnload, rpmRC, RPMRC_FAIL, RPMRC_NOTFOUND, and unblockSignals. Referenced by rpmdbFreeIterator, and rpmdbNextIterator. |
|
Compare iterator selectors by rpm tag (qsort/bsearch).
Definition at line 1765 of file rpmdb.c. References miRE_s::tag. Referenced by rpmdbSetIteratorRE. |
|
Copy pattern, escaping for appropriate mode.
Definition at line 1779 of file rpmdb.c. References RPMMIRE_DEFAULT, RPMMIRE_GLOB, RPMMIRE_REGEX, RPMMIRE_STRCMP, rpmMireMode, rpmTag, RPMTAG_BASENAMES, RPMTAG_DIRNAMES, xmalloc, and xstrdup. Referenced by rpmdbSetIteratorRE. |
|
Return pattern match.
Definition at line 1722 of file rpmdb.c. References RPMMIRE_DEFAULT, RPMMIRE_GLOB, RPMMIRE_REGEX, and RPMMIRE_STRCMP. Referenced by mireSkip. |
|
Return iterator selector match.
Definition at line 1982 of file rpmdb.c. References HFD_t, HGE_t, int_16, int_32, int_8, miregexec, miRE_s::notmatch, RPM_BIN_TYPE, RPM_CHAR_TYPE, RPM_I18NSTRING_TYPE, RPM_INT16_TYPE, RPM_INT32_TYPE, RPM_INT8_TYPE, RPM_NULL_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, RPMTAG_EPOCH, rpmTagType, and miRE_s::tag. Referenced by rpmdbNextIterator. |
|
Definition at line 911 of file rpmdb.c. References _, _DB_ERRPFX, _db_filter_dups, _DB_HOME, _DB_ROOT, rpmdb_s::_dbi, _free, rpmdb_s::db_errpfx, rpmdb_s::db_filter_dups, rpmdb_s::db_flags, rpmdb_s::db_home, rpmdb_s::db_mode, rpmdb_s::db_ndbi, rpmdb_s::db_perms, rpmdb_s::db_remove_env, rpmdb_s::db_root, dbiTagsMax, rpmdb_s::nrefs, rpmdbLink, rpmExpand, rpmExpandNumeric, rpmGetPath, and xcalloc. Referenced by openDatabase. |
|
Convert hex to binary nibble.
Definition at line 121 of file rpmdb.c. Referenced by rpmdbAdd, rpmdbRemove, rpmQueryVerify, and verifyPGPSignature. |
|
Definition at line 963 of file rpmdb.c. References rpmdb_s::db_api, rpmdb_s::db_next, dbiOpen, dbiTags, dbiTagsInit, dbiTagsMax, enableSignals, newRpmdb, RPMDB_FLAG_JUSTCHECK, RPMDB_FLAG_MINIMAL, rpmdbClose, RPMDBI_ADDED, RPMDBI_AVAILABLE, RPMDBI_DEPENDS, RPMDBI_PACKAGES, RPMDBI_REMOVED, and RPMTAG_NAME. Referenced by rpmdbInit, rpmdbOpen, rpmdbRebuild, and rpmdbVerify. |
|
Reallocate a bit map.
Definition at line 94 of file rpmdb.c. References __PBM_BITS, __pbm_bits, __PBM_IX, and xrealloc. Referenced by rpmdbNextIterator. |
|
Close a single database index.
Definition at line 812 of file rpmdb.c. References rpmdb_s::_dbi, dbiClose, dbiTags, and dbiTagsMax. |
|
Find file matches in database.
Definition at line 1156 of file rpmdb.c. References _, _free, alloca, _dbiIndexSet::count, _dbiIndex::dbi_rpmtag, _dbiIndex::dbi_txnid, dbiAppendSet, dbiCclose, dbiCopen, dbiFreeIndexSet, dbiGet, dbiIndexNewItem, dbiIndexRecordFileNumber, dbiIndexRecordOffset, dbiOpen, dbt2set, FP_EQUAL, fpCacheCreate, fpCacheFree, fpLookup, _dbiIndexItem::hdrNum, headerFree, headerLink, HFD_t, HGE_t, int_32, rpmdbFreeIterator, RPMDBI_PACKAGES, rpmdbInitIterator, rpmdbNextIterator, RPMTAG_BASENAMES, RPMTAG_DIRINDEXES, RPMTAG_DIRNAMES, rpmTagType, _dbiIndexItem::tagNum, and xcalloc. Referenced by rpmdbInitIterator. |
|
Definition at line 2338 of file rpmdb.c. References _, _dbiIndexSet::count, _dbiIndex::dbi_rpmtag, _dbiIndex::dbi_txnid, dbiCclose, dbiCopen, dbiFreeIndexSet, dbiGet, dbiOpen, dbt2set, _dbiIndexItem::fpNum, _rpmdbMatchIterator::mi_data, _rpmdbMatchIterator::mi_db, _rpmdbMatchIterator::mi_dbc, _rpmdbMatchIterator::mi_key, _rpmdbMatchIterator::mi_rpmtag, _rpmdbMatchIterator::mi_set, _dbiIndexSet::recs, and xrealloc. Referenced by rpmdbFindFpList. |
|
Definition at line 3518 of file rpmdb.c. References _, alloca, dbiTags, dbiTagsMax, rpmCleanPath, RPMDBI_ADDED, RPMDBI_AVAILABLE, RPMDBI_DEPENDS, RPMDBI_REMOVED, rpmdbRemoveDatabase, rpmioFileExists, and tagName. Referenced by rpmdbRebuild. |
|
Definition at line 3462 of file rpmdb.c. References alloca, dbiTags, dbiTagsMax, rpmCleanPath, rpmioFileExists, and tagName. Referenced by rpmdbMoveDatabase, and rpmdbRebuild. |
|
Definition at line 2316 of file rpmdb.c. References _dbiIndexSet::count, hdrNumCmp, mergesort, _rpmdbMatchIterator::mi_set, _rpmdbMatchIterator::mi_sorted, and _dbiIndexSet::recs. Referenced by rpmdbFindFpList. |
|
Check if file esists using stat(2).
Definition at line 3429 of file rpmdb.c. References Stat, URL_IS_DASH, URL_IS_FTP, URL_IS_HTTP, URL_IS_PATH, URL_IS_UNKNOWN, urlPath, and urltype. Referenced by rpmdbMoveDatabase, and rpmdbRemoveDatabase. |
|
Convert index set to database representation.
Definition at line 454 of file rpmdb.c. References _DBSWAP, dbiByteSwapped, _dbswap::ui, and xmalloc. Referenced by rpmdbAdd, and rpmdbRemove. |
|
Definition at line 3282 of file rpmdb.c. References skipDir_s::dn, skipDir_s::dnlen, and skipDirs. Referenced by rpmdbFindFpList. |
|
Restore signal mask.
Definition at line 771 of file rpmdb.c. References rpmdbCheckSignals. Referenced by miFreeHeader, rpmdbAdd, and rpmdbRemove. |
|
Definition at line 1073 of file rpmdb.c. References rpmdb_s::nrefs. |
|
Definition at line 1063 of file rpmdb.c. References rpmdb_s::nrefs. |
|
Definition at line 55 of file rpmdb.c. Referenced by newRpmdb, and rpmdbRebuild. |
|
Definition at line 53 of file rpmdb.c. Referenced by dbiOpen, and rpmdbRebuild. |
|
|
|
Definition at line 622 of file rpmdb.c. Referenced by enableSignals, handler, and rpmdbCheckSignals. |
|
Definition at line 64 of file rpmdb.c. Referenced by dbiOpen, dbiTagsInit, dbiTagToDbix, newRpmdb, openDatabase, rpmdbAdd, rpmdbCloseDBI, rpmdbMoveDatabase, rpmdbOpenAll, rpmdbRemove, and rpmdbRemoveDatabase. |
|
Initial value: { "/" , "%{_dbpath}" , 0 , 0 , 0644 , -1 , "rpmdb" } |
|
Initial value: { NULL , NULL , NULL , &db3vec , NULL } |
|
|
|
Referenced by blockSignals, disableSignals, enableSignals, handler, and rpmdbCheckSignals. |
|
Referenced by skipDir. |