rpmdb/rpmdb.c -
#include 'system.h'
#include <sys/file.h>
#include <signal.h>
#include <sys/signal.h>
#include <fnmatch.h>
#include <regex.h>
#include 'rpmcli.h'
#include 'rpmdb.h'
#include 'fprint.h'
#include 'misc.h'
#include 'debug.h'
union _dbswap
struct _rpmdbMatchIterator
struct miRE_s
#define INLINE
#define _DBI_FLAGS 0
#define _DBI_PERMS 0644
#define _DBI_MAJOR -1
#define DB1vec NULL
#define DB2vec NULL
#define DB3vec 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 rpmdbGetIteratorOffset(mi)
unsigned char nibble (char c)
Convert hex to binary nibble.
int printable (const void *ptr, size_t len)
Check key for printable characters.
int dbiTagToDbix (int rpmtag)
Return dbi index used for rpm tag.
void dbiTagsInit (void)
Initialize database (index, tag) tuple from configuration.
int dbiSync (dbiIndex dbi, unsigned int flags)
int dbiByteSwapped (dbiIndex dbi)
int dbiCopen (dbiIndex dbi, void **dbcp, unsigned int flags)
int dbiCclose (dbiIndex dbi, void *dbcursor, unsigned int flags)
int dbiDel (dbiIndex dbi, void *dbcursor, const void *keyp, size_t keylen, unsigned int flags)
int dbiGet (dbiIndex dbi, void *dbcursor, void **keypp, size_t *keylenp, void **datapp, size_t *datalenp, unsigned int flags)
int dbiPut (dbiIndex dbi, void *dbcursor, const void *keyp, size_t keylen, const void *datap, size_t datalen, unsigned int flags)
int dbiCount (dbiIndex dbi, void *dbcursor, unsigned int *countp, unsigned int flags)
int dbiVerify (dbiIndex dbi, unsigned int flags)
int dbiClose (dbiIndex dbi, unsigned int flags)
dbiIndex dbiOpen (rpmdb db, int rpmtag, unsigned int flags)
dbiIndexItem dbiIndexNewItem (unsigned int hdrNum, unsigned int tagNum)
Create and initialize item for index database set.
int dbiSearch (dbiIndex dbi, void *dbcursor, const char *keyp, size_t keylen, dbiIndexSet *setp)
Return items that match criteria.
int dbiUpdateIndex (dbiIndex dbi, void *dbcursor, const void *keyp, size_t keylen, dbiIndexSet set)
Change/delete items that match criteria.
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.
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 blockSignals (rpmdb db, sigset_t *oldMask)
Disable all signals, returning previous signal mask.
int unblockSignals (rpmdb db, sigset_t *oldMask)
Restore signal mask.
int rpmdbOpenAll (rpmdb db)
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)
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, dbiIndexSet *matches)
int rpmdbCountPackages (rpmdb db, const char *name)
int dbiFindMatches (dbiIndex dbi, void *dbcursor, const char *name, const char *version, const char *release, dbiIndexSet *matches)
Attempt partial matches on name[-version[-release]] strings.
int dbiFindByLabel (dbiIndex dbi, void *dbcursor, const char *arg, dbiIndexSet *matches)
Lookup by name, name-version, and finally by name-version-release.
int dbiUpdateRecord (dbiIndex dbi, void *dbcursor, int offset, Header h)
Rewrite a header in the database.
rpmdbMatchIterator rpmdbFreeIterator (rpmdbMatchIterator mi)
rpmdb rpmdbGetIteratorRpmDB (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.
int mireCmp (const void *a, const void *b)
Compare iterator selctors by rpm tag (qsort/bsearch).
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)
int mireSkip (const rpmdbMatchIterator mi)
Return iterator selector match.
int rpmdbSetIteratorRelease (rpmdbMatchIterator mi, const char *release)
int rpmdbSetIteratorVersion (rpmdbMatchIterator mi, const char *version)
int rpmdbSetIteratorRewrite (rpmdbMatchIterator mi, int rewrite)
int rpmdbSetIteratorModified (rpmdbMatchIterator mi, int modified)
Header XrpmdbNextIterator (rpmdbMatchIterator mi, const char *f, unsigned int l)
Header rpmdbNextIterator (rpmdbMatchIterator mi)
void rpmdbSortIterator (rpmdbMatchIterator mi)
int rpmdbGrowIterator (rpmdbMatchIterator mi, const void *keyp, size_t keylen, 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, int rpmtag, const void *keyp, size_t keylen)
int removeIndexEntry (dbiIndex dbi, void *dbcursor, const void *keyp, size_t keylen, dbiIndexItem rec)
Remove entry from database index.
int rpmdbRemove (rpmdb db, int rid, unsigned int hdrNum)
int addIndexEntry (dbiIndex dbi, void *dbcursor, const char *keyp, size_t keylen, dbiIndexItem rec)
Add entry to database index.
int rpmdbAdd (rpmdb db, int iid, Header h)
int rpmdbFindFpList (rpmdb db, fingerPrint *fpList, dbiIndexSet *matchList, int numItems)
char * db1basename (int rpmtag)
int rpmioFileExists (const char *urlfn)
Check if file esists using stat(2).
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)
int _debug = 0
int _noDirTokens
int _rebuildinprogress = 0
int _db_filter_dups = 0
int * dbiTags = NULL
int dbiTagsMax = 0
_dbiVec * mydbvecs []
rpmdb_s dbTemplate
Definition at line 831 of file rpmdb.c.
Definition at line 826 of file rpmdb.c.
Definition at line 825 of file rpmdb.c.
Definition at line 830 of file rpmdb.c.
Definition at line 827 of file rpmdb.c.
Definition at line 828 of file rpmdb.c.
Definition at line 824 of file rpmdb.c.
Definition at line 56 of file rpmdb.c.
Definition at line 58 of file rpmdb.c.
Definition at line 57 of file rpmdb.c.
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 507 of file rpmdb.c.
Referenced by dbiSearch(), and dbiUpdateIndex().
Definition at line 181 of file rpmdb.c.
Definition at line 189 of file rpmdb.c.
Definition at line 197 of file rpmdb.c.
Definition at line 46 of file rpmdb.c.
Referenced by addIndexEntry(), dbiAppendSet(), dbiByteSwapped(), dbiCclose(), dbiClose(), dbiCopen(), dbiCount(), dbiDel(), dbiGet(), dbiIndexNewItem(), dbiPruneSet(), dbiPut(), dbiSync(), dbiVerify(), and removeIndexEntry().
Add entry to database index.
Parameters:
Returns: 0 on success
Definition at line 2657 of file rpmdb.c.
References DBC, dbiAppendSet(), dbiFreeIndexSet(), dbiSearch(), dbiUpdateIndex(), INLINE, and xcalloc().
Disable all signals, returning previous signal mask.
Definition at line 804 of file rpmdb.c.
Referenced by dbiUpdateRecord(), rpmdbAdd(), and rpmdbRemove().
Append element(s) to set of index database items.
Parameters:
Returns: 0 success, 1 failure (bad args)
Definition at line 710 of file rpmdb.c.
References hdrNumCmp(), INLINE, and xrealloc().
Referenced by addIndexEntry(), rpmdbAppendIterator(), rpmdbFindByFile(), and rpmdbFindFpList().
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:
Return values:
Returns: 0 on match, 1 on no match, 2 on error
Definition at line 1441 of file rpmdb.c.
References alloca(), DBC, dbiFindMatches(), dbiFreeIndexSet(), and stpcpy().
Referenced by rpmdbInitIterator().
Attempt partial matches on name[-version[-release]] strings.
Parameters:
Return values:
Returns: 0 on match, 1 on no match, 2 on error
Definition at line 1348 of file rpmdb.c.
References DBC, dbiFreeIndexSet(), dbiIndexRecordOffset(), dbiIndexSetCount(), dbiSearch(), headerFree(), headerLink(), rpmdbFreeIterator(), RPMDBI_PACKAGES, rpmdbInitIterator(), rpmdbNextIterator(), rpmdbSetIteratorRE(), RPMMIRE_DEFAULT, RPMTAG_RELEASE, and RPMTAG_VERSION.
Referenced by dbiFindByLabel().
Create and initialize item for index database set.
Parameters:
Returns: new item
Definition at line 493 of file rpmdb.c.
References _dbiIndexItem::hdrNum, INLINE, _dbiIndexItem::tagNum, and xcalloc().
Referenced by rpmdbAdd(), rpmdbFindByFile(), and rpmdbRemove().
Remove element(s) from set of index database items.
Parameters:
Returns: 0 success, 1 failure (no items found)
Definition at line 751 of file rpmdb.c.
References hdrNumCmp(), and INLINE.
Referenced by removeIndexEntry(), and rpmdbPruneIterator().
Return items that match criteria.
Parameters:
Return values:
Returns: -1 error, 0 success, 1 not found
Definition at line 522 of file rpmdb.c.
References _, _DBSWAP, _dbiIndexSet::count, DBC, dbiByteSwapped(), dbiGet(), _dbiIndexItem::dbNum, _dbiIndexItem::fpNum, _dbiIndexItem::hdrNum, _dbiIndexSet::recs, RPMERR_DBGETINDEX, rpmError, tagName(), _dbiIndexItem::tagNum, _dbswap::ui, and xmalloc().
Referenced by addIndexEntry(), dbiFindMatches(), removeIndexEntry(), rpmdbCountPackages(), rpmdbFindByFile(), rpmdbGrowIterator(), and rpmdbInitIterator().
Initialize database (index, tag) tuple from configuration.
Definition at line 118 of file rpmdb.c.
References _, _free(), dbiTags, dbiTagsMax, dbiTagToDbix(), RPMDBI_PACKAGES, rpmExpand(), tagValue(), xcalloc(), xisspace(), xrealloc(), and xstrdup().
Return dbi index used for rpm tag.
Parameters:
Returns: dbi index, -1 on error
Definition at line 102 of file rpmdb.c.
References dbiTags, and dbiTagsMax.
Referenced by dbiOpen(), and dbiTagsInit().
Change/delete items that match criteria.
Parameters:
Returns: 0 success, 1 not found
Definition at line 612 of file rpmdb.c.
References _, _DBSWAP, alloca(), DBC, dbiByteSwapped(), dbiDel(), dbiPut(), RPMERR_DBPUTINDEX, rpmError, tagName(), and _dbswap::ui.
Referenced by addIndexEntry(), and removeIndexEntry().
Rewrite a header in the database.
Note: this is called from a markReplacedFiles iteration, and *must* preserve the 'join key' (i.e. offset) for the header.
Parameters:
Returns: 0 on success
Definition at line 1531 of file rpmdb.c.
References _free(), blockSignals(), DBC, dbiPut(), dbiSync(), expandFilelist(), HEADER_MAGIC_NO, headerSizeof(), headerUnload(), and unblockSignals().
Referenced by rpmdbAdd(), rpmdbFreeIterator(), and rpmdbNextIterator().
Definition at line 694 of file rpmdb.c.
Referenced by dbiAppendSet(), dbiPruneSet(), and rpmdbSortIterator().
Compare iterator selctors by rpm tag (qsort/bsearch).
Parameters:
Returns: result of comparison
Definition at line 1719 of file rpmdb.c.
References miRE_s::tag.
Referenced by rpmdbSetIteratorRE().
Copy pattern, escaping for appropriate mode.
Parameters:
Return values:
Parameters:
Returns: duplicated pattern
Definition at line 1733 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.
Parameters:
Returns: 0 if pattern matches
Definition at line 1675 of file rpmdb.c.
References RPMERR_REGEXEC, rpmError, RPMMIRE_DEFAULT, RPMMIRE_GLOB, RPMMIRE_REGEX, and RPMMIRE_STRCMP.
Return iterator selector match.
Parameters:
Returns: 1 if header should be skipped
Definition at line 1932 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, rpmTagType, and miRE_s::tag.
Referenced by rpmdbNextIterator().
Definition at line 903 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, RPMERR_DBOPEN, rpmError, rpmExpand(), rpmExpandNumeric(), rpmGetPath(), and xcalloc().
Convert hex to binary nibble.
Parameters:
Returns: binary nibble
Definition at line 70 of file rpmdb.c.
Referenced by rpmdbAdd(), rpmdbRemove(), and rpmQueryVerify().
Definition at line 951 of file rpmdb.c.
References _, alloca(), rpmdb_s::db_api, rpmdb_s::db_home, rpmdb_s::db_root, DBC, dbiCclose(), dbiCopen(), dbiGet(), dbiOpen(), dbiTags, dbiTagsInit(), dbiTagsMax, newRpmdb(), rpmCleanPath(), RPMDB_FLAG_JUSTCHECK, RPMDB_FLAG_MINIMAL, rpmdbClose(), RPMDBI_ADDED, RPMDBI_AVAILABLE, RPMDBI_DEPENDS, RPMDBI_PACKAGES, RPMDBI_REMOVED, RPMERR_OLDDB, rpmError, rpmExpandNumeric(), RPMTAG_BASENAMES, and RPMTAG_NAME.
Referenced by rpmdbInit(), rpmdbOpen(), rpmdbRebuild(), and rpmdbVerify().
Check key for printable characters.
Parameters:
Returns: 1 if only ASCII, 0 otherwise.
Definition at line 88 of file rpmdb.c.
Referenced by dbiGet(), and dbiPut().
Remove entry from database index.
Parameters:
Returns: 0 on success
Definition at line 2394 of file rpmdb.c.
References DBC, dbiFreeIndexSet(), dbiPruneSet(), dbiSearch(), dbiUpdateIndex(), and INLINE.
Definition at line 1169 of file rpmdb.c.
References _free(), alloca(), _dbiIndexSet::count, DBC, dbiAppendSet(), dbiCclose(), dbiCopen(), dbiFreeIndexSet(), dbiIndexNewItem(), dbiIndexRecordFileNumber(), dbiIndexRecordOffset(), dbiOpen(), dbiSearch(), 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 2214 of file rpmdb.c.
References _dbiIndexSet::count, DBC, dbiCclose(), dbiCopen(), dbiFreeIndexSet(), dbiOpen(), dbiSearch(), _dbiIndexItem::fpNum, _dbiIndexSet::recs, and xrealloc().
Referenced by rpmdbFindFpList().
Definition at line 3237 of file rpmdb.c.
References _, _free(), alloca(), db1basename(), dbiTags, dbiTagsMax, Rename(), rpmCleanPath(), RPMDBI_ADDED, RPMDBI_AVAILABLE, RPMDBI_DEPENDS, RPMDBI_REMOVED, rpmdbRemoveDatabase(), rpmioFileExists(), RPMMESS_DEBUG, rpmMessage, and tagName().
Definition at line 3173 of file rpmdb.c.
References _free(), alloca(), db1basename(), dbiTags, dbiTagsMax, rpmCleanPath(), rpmioFileExists(), and tagName().
Referenced by rpmdbMoveDatabase(), and rpmdbRebuild().
Definition at line 2195 of file rpmdb.c.
References hdrNumCmp(), and mergesort().
Referenced by rpmdbFindFpList().
Check if file esists using stat(2).
Parameters:
Returns: 1 if file exists, 0 if not
Definition at line 3140 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().
Restore signal mask.
Definition at line 817 of file rpmdb.c.
Referenced by dbiUpdateRecord(), rpmdbAdd(), and rpmdbRemove().
Todo:
Remove debugging entry from the ABI.
Definition at line 2059 of file rpmdb.c.
References rpmdbNextIterator().
Definition at line 54 of file rpmdb.c.
Referenced by newRpmdb(), and rpmdbRebuild().
Definition at line 45 of file rpmdb.c.
Referenced by dbiCclose(), dbiClose(), dbiCopen(), dbiDel(), dbiGet(), dbiPut(), dbiSync(), and dbiVerify().
Definition at line 52 of file rpmdb.c.
Referenced by dbiOpen(), and rpmdbRebuild().
Tags for which rpmdb indices will be built.
Definition at line 61 of file rpmdb.c.
Referenced by dbiTagsInit(), dbiTagToDbix(), openDatabase(), rpmdbAdd(), rpmdbMoveDatabase(), rpmdbOpenAll(), rpmdbRemove(), and rpmdbRemoveDatabase().
Definition at line 63 of file rpmdb.c.
Referenced by dbiOpen(), dbiTagsInit(), dbiTagToDbix(), newRpmdb(), openDatabase(), rpmdbAdd(), rpmdbMoveDatabase(), rpmdbOpenAll(), rpmdbRemove(), and rpmdbRemoveDatabase().
Initial value:
{ '/' , '%{_dbpath}' , 0 , 0 , 0644 , -1 , 'rpmdb' }
Definition at line 835 of file rpmdb.c.
Initial value:
{ NULL , NULL , NULL , NULL , NULL }
Definition at line 203 of file rpmdb.c.
Generated automatically by Doxygen for rpm from the source code.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |