17 #if defined(_RPMDB_INTERNAL)
25 #if defined(_RPMDB_INTERNAL)
40 typedef struct rpmdb_s *
rpmdb;
61 #if defined(_RPMDB_INTERNAL)
70 struct _dbiIndexItem {
80 struct _dbiIndexItem *
recs;
88 const char * dbv_version;
195 DBC ** dbcp,
unsigned int dbiflags)
289 unsigned int * countp,
320 const char * dbi_root;
322 const char * dbi_home;
324 const char * dbi_file;
326 const char * dbi_subfile;
328 const char * dbi_tmpdir;
354 unsigned long dbi_cl_timeout;
355 unsigned long dbi_sv_timeout;
361 void (*db_errcall) (
void *
dbenv,
const char *db_errpfx,
char *buffer)
366 const char * dbi_errpfx;
368 unsigned int dbi_thread_count;
377 const char * dbi_seq_id;
378 unsigned int dbi_seq_cachesize;
379 unsigned int dbi_seq_flags;
380 int64_t dbi_seq_initial;
388 DB_LSN *lsnp,
int redo,
void *info)
395 int dbi_heap_regionsize;
397 void * (*dbi_malloc) (
size_t nbytes)
400 unsigned int dbi_h_ffactor;
401 unsigned int (*dbi_h_hash_fcn) (
DB *,
const void *bytes,
404 unsigned int dbi_h_nelem;
405 unsigned int dbi_h_flags;
406 int (*dbi_h_dup_compare_fcn) (
DB *,
const DBT *,
const DBT *,
size_t *)
411 int (*dbi_bt_compare_fcn) (
DB *,
const DBT *,
const DBT *,
size_t *)
413 int (*dbi_bt_dup_compare_fcn) (
DB *,
const DBT *,
const DBT *,
size_t *)
415 size_t (*dbi_bt_prefix_fcn) (
DB *,
const DBT *,
const DBT *)
420 unsigned int dbi_re_len;
422 const char * dbi_re_source;
424 unsigned int dbi_q_extentsize;
427 const char * dbi_primary;
429 const char * dbi_foreign;
437 int dbi_table_exists;
449 const struct _dbiVec * dbi_vec;
460 const char * db_root;
462 const char * db_home;
468 const char * db_errpfx;
474 void (*db_errcall) (
const char * db_errpfx,
char * buffer)
479 void * (*db_malloc) (
size_t nbytes)
482 void * (*db_realloc) (
void *
ptr,
size_t nbytes)
509 #if defined(__LCLINT__)
520 #if defined(_RPMDB_INTERNAL)
522 #if defined(WITH_DB) || defined(WITH_SQLITE)
543 #define db3Free(_dbi) \
544 ((dbiIndex)rpmioFreePoolItem((rpmioItem)(_dbi), __FUNCTION__, __FILE__, __LINE__))
554 extern const char * prDbiOpenFlags(
int dbflags,
int print_dbenv_flags)
596 return (*dbi->dbi_vec->copen) (
dbi, txnid, dbcp,
flags);
607 int dbiCclose(
dbiIndex dbi,
DBC * dbcursor,
unsigned int flags)
611 return (*dbi->dbi_vec->cclose) (
dbi, dbcursor,
flags);
627 return (*dbi->dbi_vec->cdup) (
dbi, dbcursor, dbcp,
flags);
649 rc = (dbi->dbi_vec->cdel) (dbi, dbcursor, key, data, flags);
672 rc = (dbi->dbi_vec->cget) (dbi, dbcursor, key, data, flags);
689 DBT * key,
DBT * pkey,
DBT * data,
unsigned int flags)
696 rc = (dbi->dbi_vec->cpget) (dbi, dbcursor, key, pkey, data, flags);
720 rc = (dbi->dbi_vec->cput) (dbi, dbcursor, key, data, flags);
734 int dbiCount(
dbiIndex dbi,
DBC * dbcursor,
unsigned int * countp,
739 return (*dbi->dbi_vec->ccount) (
dbi, dbcursor, countp,
flags);
749 int dbiClose(
dbiIndex dbi,
unsigned int flags)
753 return (*dbi->dbi_vec->close) (
dbi,
flags);
763 int dbiSync (
dbiIndex dbi,
unsigned int flags)
767 return (*dbi->dbi_vec->sync) (
dbi,
flags);
778 int dbiExists(
dbiIndex dbi,
DBT * key,
unsigned int flags)
793 int dbiSeqno(
dbiIndex dbi, int64_t * seqnop,
unsigned int flags)
797 return (*dbi->dbi_vec->seqno) (
dbi, seqnop,
flags);
810 int (*callback) (
DB *,
const DBT *,
const DBT *,
DBT *),
815 return (*dbi->dbi_vec->associate) (
dbi, dbisecondary, callback,
flags);
832 return (*dbi->dbi_vec->join) (
dbi, curslist, dbcp,
flags);
844 return (*dbi->dbi_vec->byteswapped) (
dbi);
854 int dbiStat(
dbiIndex dbi,
unsigned int flags)
857 return (*dbi->dbi_vec->stat) (
dbi,
flags);
874 #if defined(_RPMDB_INTERNAL)
876 #if !defined(__LCLINT__)
878 int rpmlkId(rpmdb rpmdb, uint32_t *_idp)
881 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
882 ? dbenv->lock_id(dbenv, _idp) : ENOTSUP;
884 fprintf(stderr,
"<-- %s(%p,%p) id 0x%x rc %d\n",
"dbenv->lock_id", dbenv, _idp, *_idp, rc);
889 int rpmlkIdFree(rpmdb rpmdb, uint32_t _id)
892 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
893 ? dbenv->lock_id_free(dbenv, _id) : ENOTSUP;
895 fprintf(stderr,
"<-- %s(%p,%u) rc %d\n",
"dbenv->lock_id_free", dbenv, (
unsigned)_id, rc);
900 int rpmlkGet(rpmdb rpmdb,
DBT * _object, uint32_t _lockmode,
void * _lock)
903 uint32_t _locker = 0x12344321;
905 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
906 ? dbenv->lock_get(dbenv, _locker, _flags, _object, (db_lockmode_t)_lockmode, (DB_LOCK*)_lock)
909 fprintf(stderr,
"<-- %s(%p,0x%x,0x%x,%p,0x%x,%p) rc %d\n",
"dbenv->lock_get", dbenv, _locker, _flags, _object, _lockmode, _lock, rc);
914 int rpmlkPut(rpmdb rpmdb,
void * _lock)
917 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080)
918 ? dbenv->lock_put(dbenv, (DB_LOCK*)_lock)
921 fprintf(stderr,
"<-- %s(%p,%p) rc %d\n",
"dbenv->lock_put", dbenv, _lock, rc);
926 int rpmlgcOpen(rpmdb rpmdb)
929 DB_LOGC * _logc =
NULL;
931 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
932 ? dbenv->log_cursor(dbenv, &_logc, _flags) : ENOTSUP;
933 rpmdb->db_logc = (!rc ? _logc :
NULL);
935 fprintf(stderr,
"<-- %s(%p,%p,0x%x) logc %p rc %d\n",
"dbenv->log_cursor", dbenv, &_logc, _flags, _logc, rc);
940 int rpmlgcGet(rpmdb rpmdb, DB_LSN * _lsn,
DBT * data, uint32_t flags)
942 DB_LOGC * _logc = rpmdb->db_logc;
943 int rc = (_logc ? _logc->get(_logc, _lsn, data, flags) : ENOTSUP);
945 fprintf(stderr,
"<-- %s(%p,%p,%p,0x%x) rc %d\n",
"logc->get", _logc, _lsn, data, flags, rc);
950 int rpmlgcClose(rpmdb rpmdb)
952 DB_LOGC * _logc = rpmdb->db_logc;
954 int rc = (_logc ? _logc->close(_logc, _flags) : ENOTSUP);
955 rpmdb->db_logc =
NULL;
957 fprintf(stderr,
"<-- %s(%p) rc %d\n",
"logc->close", _logc, rc);
962 int rpmlgcFile(rpmdb rpmdb,
const DB_LSN * _lsn,
char *
name,
size_t len)
965 int rc = dbenv->log_file(dbenv, _lsn, name, len);
967 fprintf(stderr,
"<-- %s(%p,%p,%p[%u]) \"%s\" rc %d\n",
"dbenv->log_file", dbenv, _lsn, name, (
unsigned)len, name, rc);
972 int rpmlgcFlush(rpmdb rpmdb,
const DB_LSN * _lsn)
975 int rc = dbenv->log_flush(dbenv, _lsn);
977 fprintf(stderr,
"<-- %s(%p,%p) rc %d\n",
"dbenv->log_flush", dbenv, _lsn, rc);
982 int rpmlgcPrintf(rpmdb rpmdb,
const char * fmt,
void *_A1,
void *_A2,
void *_A3,
void *_A4,
void *_A5)
986 int rc = dbenv->log_printf(dbenv, _txnid, fmt, _A1, _A2, _A3, _A4, _A5);
988 fprintf(stderr,
"<-- %s(%p,%p,\"%s\", ...) rc %d\n",
"dbenv->log_printf", dbenv, _txnid, fmt, rc);
993 int rpmlgcPut(rpmdb rpmdb, DB_LSN * _lsn,
const DBT * data, uint32_t flags)
996 int rc = dbenv->log_put(dbenv, _lsn, data, flags);
998 fprintf(stderr,
"<-- %s(%p,%p,%p,0x%x) rc %d\n",
"dbenv->log_put", dbenv, _lsn, data, flags, rc);
1003 int rpmmpfSyncAll(rpmdb rpmdb)
1006 DB_LSN * _lsn =
NULL;
1007 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
1008 ? dbenv->memp_sync(dbenv, _lsn) : ENOTSUP;
1010 fprintf(stderr,
"<-- %s(%p,%p) rc %d\n",
"dbenv->memp_sync", dbenv, _lsn, rc);
1015 int rpmmpfTrickle(rpmdb rpmdb)
1020 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
1021 ? dbenv->memp_trickle(dbenv, _percent, &_nwrote) : ENOTSUP;
1023 fprintf(stderr,
"<-- %s(%p,%d) nwrote %d rc %d\n",
"dbenv->memp_trickle", dbenv, _percent, _nwrote, rc);
1028 int rpmmpfClose(rpmdb rpmdb)
1030 DB_MPOOLFILE * mpf = rpmdb->db_mpf;
1031 uint32_t _flags = 0;
1032 int rc = (mpf ? mpf->close(mpf, _flags) : ENOTSUP);
1033 rpmdb->db_mpf =
NULL;
1035 fprintf(stderr,
"<-- %s(%p) rc %d\n",
"mpf->close", mpf, rc);
1040 int rpmmpfGet(rpmdb rpmdb, uint32_t * _pgnop, uint32_t _flags,
void ** _pagep)
1042 DB_MPOOLFILE * mpf = rpmdb->db_mpf;
1044 int rc = mpf->get(mpf, _pgnop, _txnid, _flags, _pagep);
1046 fprintf(stderr,
"<-- %s(%p,%p,%p,0x%x,%p) rc %d\n",
"mpf->get", mpf, _pgnop, _txnid, _flags, _pagep, rc);
1051 int rpmmpfOpen(rpmdb rpmdb,
const char *
fn, uint32_t flags)
1054 DB_MPOOLFILE * mpf =
NULL;
1055 int _perms = rpmdb->_dbi[0]->dbi_perms;
1056 size_t _pagesize = BUFSIZ;
1057 uint32_t _fcreate_flags = 0;
1058 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100)
1059 ? dbenv->memp_fcreate(dbenv, &mpf, _fcreate_flags) : ENOTSUP;
1062 fprintf(stderr,
"<-- %s(%p,&mpf,0x%x) mpf %p rc %d\n",
"dbenv->memp_fcreate", dbenv, _fcreate_flags, mpf, rc);
1064 rc = mpf->open(mpf, fn, flags, _perms, _pagesize);
1065 rpmdb->db_mpf = (!rc ? mpf :
NULL);
1067 fprintf(stderr,
"<-- %s(%p,%s,0x%x) rc %d\n",
"mpf->open", mpf, fn, flags, rc);
1074 int rpmmpfPut(rpmdb rpmdb,
void * _page, uint32_t flags)
1076 DB_MPOOLFILE * mpf = rpmdb->db_mpf;
1077 uint32_t _priority = DB_PRIORITY_DEFAULT;
1078 int rc = mpf->put(mpf, _page, (DB_CACHE_PRIORITY)_priority, flags);
1080 fprintf(stderr,
"<-- %s(%p,%p,0x%x,0x%x) rc %d\n",
"mpf->put", mpf, _page, _priority, flags, rc);
1085 int rpmmpfSync(rpmdb rpmdb)
1087 DB_MPOOLFILE * mpf = rpmdb->db_mpf;
1088 int rc = (mpf ? mpf->sync(mpf) : ENOTSUP);
1090 fprintf(stderr,
"<-- %s(%p) rc %d\n",
"mpf->close", mpf, rc);
1146 #define rpmdbUnlink(_db, _msg) \
1147 ((rpmdb)rpmioUnlinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__))
1158 #define rpmdbLink(_db, _msg) \
1159 ((void *)rpmioLinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__))
1166 int mode, mode_t perms,
int flags)
1179 int mode, mode_t perms)
1231 const void * keyp,
size_t keylen)
1277 const uint32_t * hdrNums,
int nHdrNums)
1307 uint32_t * hdrNums,
int nHdrNums,
int sorted)
1352 const void * keyp,
size_t keylen)
1397 #define rpmmiUnlink(_mi) \
1398 ((rpmmi)rpmioUnlinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
1409 #define rpmmiLink(_mi) \
1410 ((rpmmi)rpmioLinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
1421 #define rpmmiFree(_mi) \
1422 ((rpmmi)rpmioFreePoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
1434 const char *** argvp)
1471 int (*cmp) (
const void *,
const void *))
struct rpmmi_s * rpmmi
Database iterator.
struct rpmdb_s * rpmdb
Database of headers and tag value indices.
int rpmmiGrowBasename(rpmmi mi, const char *bn)
Append packages containing common basename to iterator.
uint32_t rpmmiInstance(rpmmi mi)
Return header instance for current position of rpmdb iterator.
struct rpmts_s * rpmts
The RPM Transaction Set.
int rpmdbClose(rpmdb db)
Close all database indices and free rpmdb.
int rpmdbAdd(rpmdb db, int iid, Header h, rpmts ts)
Add package header to rpm database and indices.
int rpmmiSetModified(rpmmi mi, int modified)
Modify iterator to mark header for lazy write on release.
uint32_t dbiIndexRecordFileNumber(dbiIndexSet set, unsigned int recno)
int rpmdbRemove(rpmdb db, int rid, uint32_t hdrNum, rpmts ts)
Remove package header from rpm database and indices.
static PyObject *char * mode
dbiIndexSet dbiFreeIndexSet(dbiIndexSet set)
int rpmdbCountPackages(rpmdb db, const char *N)
Return number of instances of package in Name index.
int rpmmiGrow(rpmmi mi, const uint32_t *hdrNums, int nHdrNums)
Append items to set of package instances to iterate.
assert(key->size==sizeof(hdrNum))
int rpmdbOpen(const char *prefix, rpmdb *dbp, int mode, mode_t perms)
Open rpm database.
struct _dbiIndexSet * dbiIndexSet
A single element (i.e.
fprintf(stderr,"--> %s(%p,%p,%p) sig %p sigp %p\n", __FUNCTION__, dig, t, rsactx, sig, sigp)
unsigned int rpmmiCount(rpmmi mi)
Return number of elements in rpm database iterator.
<--%s(%p,%p,%p,%p) rc%d\n\tdbi%p(%s) rpmdb%ph%p%s\n",__FUNCTION__,db,key,data,_r,rc,dbi,tagName(dbi-> dbi_rpmtag
#define rpmdbUnlink(_db, _msg)
Header rpmmiNext(rpmmi mi)
Return next package header from iteration.
int rpmdbCloseDBI(rpmdb db, int tag)
Close a single database index.
int rpmmiAddPattern(rpmmi mi, rpmTag tag, rpmMireMode mode, const char *pattern)
Add pattern to iterator selector.
void * dbiStatsAccumulator(dbiIndex dbi, int opx)
struct tagStore_s * tagStore_t
int rpmdbCheckSignals(void)
Check for and exit on termination signals.
enum rpmMireMode_e rpmMireMode
Tag value pattern match mode.
Cumulative statistics for an operation.
uint32_t rpmmiBNTag(rpmmi mi)
Return basename tag for current position of rpmdb iterator.
rpmdb rpmdbNew(const char *root, const char *home, int mode, mode_t perms, int flags)
uint32_t dbiIndexRecordOffset(dbiIndexSet set, unsigned int recno)
static const char * prefix[]
Tables for prefixing and suffixing patterns, according to the -w, -x, and -F options.
int rpmdbCount(rpmdb db, rpmTag tag, const void *keyp, size_t keylen)
Return number of instances of key in a tag index.
dbiIndex dbiOpen(rpmdb db, rpmTag tag, unsigned int flags)
int rpm_mergesort(void *base, size_t nmemb, size_t size, int(*cmp)(const void *, const void *))
Mergesort, same arguments as qsort(2).
int rpmmiSetRewrite(rpmmi mi, int rewrite)
Prepare iterator for lazy writes.
#define rpmdbLink(_db, _msg)
int rpmdbOpenAll(rpmdb db)
Open all database indices.
int rpmdbCheckTerminate(int terminate)
Check rpmdb signal handler for trapped signal and/or requested exit.
static void
Print copy of spec file, filling in Group/Description/Summary from specspo.
int
Save source and expand field into target.
int rpmmiPrune(rpmmi mi, uint32_t *hdrNums, int nHdrNums, int sorted)
Remove items from set of package instances to iterate.
struct _dbiIndexItem * dbiIndexItem
int rpmdbMireApply(rpmdb db, rpmTag tag, rpmMireMode mode, const char *pat, const char ***argvp)
Return array of keys matching a pattern.
int rpmdbBlockDBI(rpmdb db, int tag)
Block access to a single database index.
int rpmmiSort(rpmmi mi)
Sort iterator instances.
rpmmi rpmmiInit(rpmdb db, rpmTag tag, const void *keyp, size_t keylen)
Return database iterator.
struct _dbiIndex * dbiIndex
unsigned int dbiIndexSetCount(dbiIndexSet set)