rpm 5.3.12
|
00001 #ifndef H_RPMDB 00002 #define H_RPMDB 00003 /*@-bounds@*/ 00004 00010 #include <assert.h> 00011 #include <mire.h> 00012 00013 #include <rpmtypes.h> 00014 #include <rpmtag.h> /* XXX Header typedef */ 00015 00016 #if defined(_RPMDB_INTERNAL) 00017 #if defined(WITH_DB) 00018 #include <db51/db.h> 00019 #else 00020 #include "db_emu.h" 00021 #endif 00022 #endif 00023 00024 #if defined(_RPMDB_INTERNAL) 00025 #define DBT_INIT /*@-fullinitblock@*/ {0} /*@-fullinitblock@*/ /* -Wno-missing-field-initializers */ 00026 #endif 00027 00028 /*@-exportlocal@*/ 00029 /*@unchecked@*/ 00030 extern int _rpmdb_debug; 00031 /*@unchecked@*/ 00032 extern int _rpmmi_debug; 00033 /*@=exportlocal@*/ 00034 00035 #ifdef NOTYET 00036 00039 typedef /*@abstract@*/ /*@refcounted@*/ struct rpmdb_s * rpmdb; 00040 00044 typedef /*@abstract@*/ /*@refcounted@*/ struct rpmmi_s * rpmmi; 00045 #endif 00046 00049 typedef /*@abstract@*/ struct _dbiIndexItem * dbiIndexItem; 00050 00054 typedef /*@abstract@*/ struct _dbiIndexSet * dbiIndexSet; 00055 00058 typedef /*@abstract@*/ struct _dbiIndex * dbiIndex; 00059 00060 #if defined(_RPMDB_INTERNAL) 00061 #include <rpmio.h> 00062 #include <rpmbf.h> 00063 #include <rpmsw.h> 00064 00065 #if !defined(SWIG) /* XXX inline dbiFoo() need */ 00066 00069 struct _dbiIndexItem { 00070 uint32_t hdrNum; 00071 uint32_t tagNum; 00072 }; 00073 00077 struct _dbiIndexSet { 00078 /*@owned@*/ 00079 struct _dbiIndexItem * recs; 00080 unsigned int count; 00081 }; 00082 00086 struct _dbiVec { 00087 const char * dbv_version; 00088 int dbv_major; 00089 int dbv_minor; 00090 int dbv_patch; 00098 int (*open) (rpmdb rpmdb, rpmTag tag, /*@out@*/ dbiIndex * dbip) 00099 /*@globals fileSystem @*/ 00100 /*@modifies *dbip, fileSystem @*/; 00101 00108 int (*close) (/*@only@*/ dbiIndex dbi, unsigned int flags) 00109 /*@globals fileSystem @*/ 00110 /*@modifies dbi, fileSystem @*/; 00111 00118 int (*sync) (dbiIndex dbi, unsigned int flags) 00119 /*@globals fileSystem @*/ 00120 /*@modifies fileSystem @*/; 00121 00130 int (*associate) (dbiIndex dbi, dbiIndex dbisecondary, 00131 int (*callback) (DB *, const DBT *, const DBT *, DBT *), 00132 unsigned int flags) 00133 /*@globals fileSystem @*/ 00134 /*@modifies dbi, fileSystem @*/; 00135 00144 int (*associate_foreign) (dbiIndex dbi, dbiIndex dbisecondary, 00145 int (*callback) (DB *, const DBT *, DBT *, const DBT *, int *), 00146 unsigned int flags) 00147 /*@globals fileSystem @*/ 00148 /*@modifies dbi, fileSystem @*/; 00149 00158 int (*join) (dbiIndex dbi, DBC ** curslist, /*@out@*/ DBC ** dbcp, 00159 unsigned int flags) 00160 /*@globals fileSystem @*/ 00161 /*@modifies dbi, *dbcp, fileSystem @*/; 00162 00170 int (*exists) (dbiIndex dbi, DBT * key, unsigned int flags) 00171 /*@globals fileSystem @*/ 00172 /*@modifies dbi, fileSystem @*/; 00173 00181 int (*seqno) (dbiIndex dbi, /*@null@*/ int64_t * seqnop, unsigned int flags) 00182 /*@globals fileSystem @*/ 00183 /*@modifies dbi, *seqnop, fileSystem @*/; 00184 00193 int (*copen) (dbiIndex dbi, /*@null@*/ DB_TXN * txnid, 00194 /*@out@*/ DBC ** dbcp, unsigned int dbiflags) 00195 /*@globals fileSystem @*/ 00196 /*@modifies dbi, *txnid, *dbcp, fileSystem @*/; 00197 00205 int (*cclose) (dbiIndex dbi, /*@only@*/ DBC * dbcursor, unsigned int flags) 00206 /*@globals fileSystem @*/ 00207 /*@modifies dbi, *dbcursor, fileSystem @*/; 00208 00217 int (*cdup) (dbiIndex dbi, DBC * dbcursor, /*@out@*/ DBC ** dbcp, 00218 unsigned int flags) 00219 /*@globals fileSystem @*/ 00220 /*@modifies dbi, *dbcp, fileSystem @*/; 00221 00231 int (*cdel) (dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data, 00232 unsigned int flags) 00233 /*@globals fileSystem @*/ 00234 /*@modifies *dbcursor, fileSystem @*/; 00235 00245 int (*cget) (dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data, 00246 unsigned int flags) 00247 /*@globals fileSystem @*/ 00248 /*@modifies *dbcursor, *key, *data, fileSystem @*/; 00249 00260 int (*cpget) (dbiIndex dbi, /*@null@*/ DBC * dbcursor, 00261 DBT * key, DBT * pkey, DBT * data, unsigned int flags) 00262 /*@globals fileSystem @*/ 00263 /*@modifies *dbcursor, *key, *pkey, *data, fileSystem @*/; 00264 00274 int (*cput) (dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data, 00275 unsigned int flags) 00276 /*@globals fileSystem @*/ 00277 /*@modifies *dbcursor, fileSystem @*/; 00278 00287 int (*ccount) (dbiIndex dbi, DBC * dbcursor, 00288 /*@out@*/ unsigned int * countp, 00289 unsigned int flags) 00290 /*@globals fileSystem @*/ 00291 /*@modifies *dbcursor, fileSystem @*/; 00292 00298 int (*byteswapped) (dbiIndex dbi) 00299 /*@globals fileSystem @*/ 00300 /*@modifies fileSystem @*/; 00301 00308 int (*stat) (dbiIndex dbi, unsigned int flags) 00309 /*@globals fileSystem @*/ 00310 /*@modifies dbi, fileSystem @*/; 00311 }; 00312 00316 struct _dbiIndex { 00317 struct rpmioItem_s _item; 00318 /*@relnull@*/ 00319 const char * dbi_root; 00320 /*@null@*/ 00321 const char * dbi_home; 00322 /*@relnull@*/ 00323 const char * dbi_file; 00324 /*@relnull@*/ 00325 const char * dbi_subfile; 00326 /*@null@*/ 00327 const char * dbi_tmpdir; 00329 int dbi_ecflags; 00330 int dbi_cflags; 00331 int dbi_oeflags; 00332 int dbi_eflags; 00333 int dbi_oflags; 00334 int dbi_tflags; 00336 int dbi_type; 00337 unsigned dbi_mode; 00338 int dbi_perms; 00339 long dbi_shmkey; 00340 int dbi_api; 00342 int dbi_use_dbenv; 00343 int dbi_no_fsync; 00344 int dbi_no_dbsync; 00345 int dbi_lockdbfd; 00346 int dbi_temporary; 00347 int dbi_debug; 00348 00349 rpmbf dbi_bf; 00350 00351 /*@null@*/ 00352 char * dbi_host; 00353 unsigned long dbi_cl_timeout; 00354 unsigned long dbi_sv_timeout; 00355 00356 /* dbenv parameters */ 00357 int dbi_lorder; 00358 /*@unused@*/ 00359 /* XXX db-4.3.14 adds dbenv as 1st arg. */ 00360 void (*db_errcall) (void * dbenv, const char *db_errpfx, char *buffer) 00361 /*@globals fileSystem @*/ 00362 /*@modifies fileSystem @*/; 00363 /*@unused@*/ /*@shared@*/ 00364 FILE * dbi_errfile; 00365 const char * dbi_errpfx; 00366 int dbi_region_init; 00367 unsigned int dbi_thread_count; 00368 00369 /* locking sub-system parameters */ 00370 /* logging sub-system parameters */ 00371 /* mpool sub-system parameters */ 00372 /* mutex sub-system parameters */ 00373 /* replication sub-system parameters */ 00374 00375 /* sequences sub-system parameters */ 00376 const char * dbi_seq_id; 00377 unsigned int dbi_seq_cachesize; 00378 unsigned int dbi_seq_flags; 00379 int64_t dbi_seq_initial; 00380 int64_t dbi_seq_min; 00381 int64_t dbi_seq_max; 00382 00383 /* transaction sub-system parameters */ 00384 #if 0 00385 int (*dbi_tx_recover) (DB_ENV *dbenv, DBT *log_rec, 00386 DB_LSN *lsnp, int redo, void *info) 00387 /*@globals fileSystem @*/ 00388 /*@modifies fileSystem @*/; 00389 #endif 00390 /* dbinfo parameters */ 00391 int dbi_pagesize; 00392 /*@unused@*/ /*@null@*/ 00393 void * (*dbi_malloc) (size_t nbytes) 00394 /*@*/; 00395 /* hash access parameters */ 00396 unsigned int dbi_h_ffactor; 00397 unsigned int (*dbi_h_hash_fcn) (DB *, const void *bytes, 00398 unsigned int length) 00399 /*@*/; 00400 unsigned int dbi_h_nelem; 00401 unsigned int dbi_h_flags; 00402 int (*dbi_h_dup_compare_fcn) (DB *, const DBT *, const DBT *) 00403 /*@*/; 00404 /* btree access parameters */ 00405 int dbi_bt_flags; 00406 int dbi_bt_minkey; 00407 int (*dbi_bt_compare_fcn) (DB *, const DBT *, const DBT *) 00408 /*@*/; 00409 int (*dbi_bt_dup_compare_fcn) (DB *, const DBT *, const DBT *) 00410 /*@*/; 00411 size_t (*dbi_bt_prefix_fcn) (DB *, const DBT *, const DBT *) 00412 /*@*/; 00413 /* recno access parameters */ 00414 int dbi_re_flags; 00415 int dbi_re_delim; 00416 unsigned int dbi_re_len; 00417 int dbi_re_pad; 00418 const char * dbi_re_source; 00419 /* queue access parameters */ 00420 unsigned int dbi_q_extentsize; 00421 00422 /*@null@*/ 00423 const char * dbi_primary; 00424 /*@null@*/ 00425 const char * dbi_foreign; 00426 00427 /*@refcounted@*/ 00428 rpmdb dbi_rpmdb; 00429 rpmTag dbi_rpmtag; 00430 size_t dbi_jlen; 00432 /*@only@*/ /*@relnull@*/ 00433 DB_SEQUENCE * dbi_seq; 00434 /*@only@*/ /*@relnull@*/ 00435 DB * dbi_db; 00436 /*@only@*/ /*@null@*/ 00437 DB_TXN * dbi_txnid; 00438 /*@only@*/ /*@null@*/ 00439 void * dbi_stats; 00441 /*@observer@*/ 00442 const struct _dbiVec * dbi_vec; 00444 }; 00445 #endif /* !defined(SWIG) */ 00446 00450 struct rpmdb_s { 00451 struct rpmioItem_s _item; 00452 /*@owned@*/ /*@relnull@*/ 00453 const char * db_root; 00454 /*@owned@*/ 00455 const char * db_home; 00456 int db_flags; 00457 int db_mode; 00458 int db_perms; 00459 int db_api; 00460 /*@owned@*/ 00461 const char * db_errpfx; 00463 int db_remove_env; 00464 uint32_t db_maxkey; 00466 int db_chrootDone; 00467 void (*db_errcall) (const char * db_errpfx, char * buffer) 00468 /*@*/; 00469 /*@shared@*/ 00470 FILE * db_errfile; 00471 /*@only@*/ 00472 void * (*db_malloc) (size_t nbytes) 00473 /*@*/; 00474 /*@only@*/ 00475 void * (*db_realloc) (/*@only@*//*@null@*/ void * ptr, size_t nbytes) 00476 /*@*/; 00477 void (*db_free) (/*@only@*/ void * ptr) 00478 /*@modifies *ptr @*/; 00479 00480 int (*db_export) (rpmdb db, Header h, int adding); 00481 00482 /*@refcounted@*/ 00483 Header db_h; 00485 rpmdb db_next; 00486 int db_opens; 00488 void * db_dbenv; 00489 void * db_txn; 00490 DB_LOGC * db_logc; 00491 DB_MPOOLFILE *db_mpf; 00493 tagStore_t db_tags; 00494 size_t db_ndbi; 00495 /*@only@*/ /*@null@*/ 00496 dbiIndex * _dbi; 00498 struct rpmop_s db_getops; 00499 struct rpmop_s db_putops; 00500 struct rpmop_s db_delops; 00502 #if defined(__LCLINT__) 00503 /*@refs@*/ 00504 int nrefs; 00505 #endif 00506 }; 00507 #endif /* defined(_RPMDB_INTERNAL) */ 00508 00509 #ifdef __cplusplus 00510 extern "C" { 00511 #endif 00512 00513 #if defined(_RPMDB_INTERNAL) 00514 /*@-exportlocal@*/ 00515 #if defined(WITH_DB) || defined(WITH_SQLITE) 00516 00522 /*@unused@*/ /*@only@*/ /*@null@*/ 00523 dbiIndex db3New(rpmdb rpmdb, rpmTag tag) 00524 /*@globals rpmGlobalMacroContext, h_errno, internalState @*/ 00525 /*@modifies rpmGlobalMacroContext, internalState @*/; 00526 00532 /*@null@*/ 00533 dbiIndex db3Free(/*@only@*/ /*@null@*/ dbiIndex dbi) 00534 /*@globals fileSystem, internalState @*/ 00535 /*@modifies dbi, fileSystem, internalState @*/; 00536 #define db3Free(_dbi) \ 00537 ((dbiIndex)rpmioFreePoolItem((rpmioItem)(_dbi), __FUNCTION__, __FILE__, __LINE__)) 00538 00545 /*@-redecl@*/ 00546 /*@exposed@*/ 00547 extern const char * prDbiOpenFlags(int dbflags, int print_dbenv_flags) 00548 /*@*/; 00549 /*@=redecl@*/ 00550 #endif 00551 00559 /*@only@*/ /*@null@*/ dbiIndex dbiOpen(/*@null@*/ rpmdb db, rpmTag tag, 00560 unsigned int flags) 00561 /*@globals rpmGlobalMacroContext, errno, h_errno, internalState @*/ 00562 /*@modifies db, rpmGlobalMacroContext, errno, internalState @*/; 00563 00570 void * dbiStatsAccumulator(dbiIndex dbi, int opx) 00571 /*@*/; 00572 00573 #if !defined(SWIG) 00574 /*@-globuse -mustmod @*/ /* FIX: vector annotations */ 00583 /*@unused@*/ static inline 00584 int dbiCopen(dbiIndex dbi, /*@null@*/ DB_TXN * txnid, 00585 /*@out@*/ DBC ** dbcp, unsigned int flags) 00586 /*@globals fileSystem @*/ 00587 /*@modifies dbi, *dbcp, fileSystem @*/ 00588 { 00589 return (*dbi->dbi_vec->copen) (dbi, txnid, dbcp, flags); 00590 } 00591 00599 /*@unused@*/ static inline 00600 int dbiCclose(dbiIndex dbi, /*@only@*/ DBC * dbcursor, unsigned int flags) 00601 /*@globals fileSystem @*/ 00602 /*@modifies dbi, *dbcursor, fileSystem @*/ 00603 { 00604 return (*dbi->dbi_vec->cclose) (dbi, dbcursor, flags); 00605 } 00606 00615 /*@unused@*/ static inline 00616 int dbiCdup(dbiIndex dbi, DBC * dbcursor, /*@out@*/ DBC ** dbcp, 00617 unsigned int flags) 00618 /*@modifies dbi, *dbcp @*/ 00619 { 00620 return (*dbi->dbi_vec->cdup) (dbi, dbcursor, dbcp, flags); 00621 } 00622 00632 /*@unused@*/ static inline 00633 int dbiDel(dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data, 00634 unsigned int flags) 00635 /*@globals fileSystem, internalState @*/ 00636 /*@modifies dbi, *dbcursor, fileSystem, internalState @*/ 00637 { 00638 rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 16); /* RPMTS_OP_DBDEL */ 00639 int rc; 00640 assert(key->data != NULL && key->size > 0); 00641 (void) rpmswEnter(sw, 0); 00642 rc = (dbi->dbi_vec->cdel) (dbi, dbcursor, key, data, flags); 00643 (void) rpmswExit(sw, data->size); 00644 return rc; 00645 } 00646 00656 /*@unused@*/ static inline 00657 int dbiGet(dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data, 00658 unsigned int flags) 00659 /*@globals fileSystem, internalState @*/ 00660 /*@modifies dbi, *dbcursor, *key, *data, fileSystem, internalState @*/ 00661 { 00662 rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 14); /* RPMTS_OP_DBGET */ 00663 int rc; 00664 (void) rpmswEnter(sw, 0); 00665 rc = (dbi->dbi_vec->cget) (dbi, dbcursor, key, data, flags); 00666 (void) rpmswExit(sw, data->size); 00667 return rc; 00668 } 00669 00680 /*@unused@*/ static inline 00681 int dbiPget(dbiIndex dbi, /*@null@*/ DBC * dbcursor, 00682 DBT * key, DBT * pkey, DBT * data, unsigned int flags) 00683 /*@globals fileSystem, internalState @*/ 00684 /*@modifies dbi, *dbcursor, *key, *pkey, *data, fileSystem, internalState @*/ 00685 { 00686 rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 14); /* RPMTS_OP_DBGET */ 00687 int rc; 00688 (void) rpmswEnter(sw, 0); 00689 rc = (dbi->dbi_vec->cpget) (dbi, dbcursor, key, pkey, data, flags); 00690 (void) rpmswExit(sw, data->size); 00691 return rc; 00692 } 00693 00703 /*@unused@*/ static inline 00704 int dbiPut(dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data, 00705 unsigned int flags) 00706 /*@globals fileSystem, internalState @*/ 00707 /*@modifies dbi, *dbcursor, *key, fileSystem, internalState @*/ 00708 { 00709 rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 15); /* RPMTS_OP_DBPUT */ 00710 int rc; 00711 assert(key->data != NULL && key->size > 0 && data->data != NULL && data->size > 0); 00712 (void) rpmswEnter(sw, 0); 00713 rc = (dbi->dbi_vec->cput) (dbi, dbcursor, key, data, flags); 00714 (void) rpmswExit(sw, data->size); 00715 return rc; 00716 } 00717 00726 /*@unused@*/ static inline 00727 int dbiCount(dbiIndex dbi, DBC * dbcursor, /*@out@*/ unsigned int * countp, 00728 unsigned int flags) 00729 /*@globals fileSystem @*/ 00730 /*@modifies *dbcursor, fileSystem @*/ 00731 { 00732 return (*dbi->dbi_vec->ccount) (dbi, dbcursor, countp, flags); 00733 } 00734 00741 /*@unused@*/ static inline 00742 int dbiClose(/*@only@*/ dbiIndex dbi, unsigned int flags) 00743 /*@globals fileSystem @*/ 00744 /*@modifies dbi, fileSystem @*/ 00745 { 00746 return (*dbi->dbi_vec->close) (dbi, flags); 00747 } 00748 00755 /*@unused@*/ static inline 00756 int dbiSync (dbiIndex dbi, unsigned int flags) 00757 /*@globals fileSystem @*/ 00758 /*@modifies fileSystem @*/ 00759 { 00760 return (*dbi->dbi_vec->sync) (dbi, flags); 00761 } 00762 00770 /*@unused@*/ static inline 00771 int dbiExists(dbiIndex dbi, /*@out@*/ DBT * key, unsigned int flags) 00772 /*@globals fileSystem @*/ 00773 /*@modifies dbi, fileSystem @*/ 00774 { 00775 return (*dbi->dbi_vec->exists) (dbi, key, flags); 00776 } 00777 00785 /*@unused@*/ static inline 00786 int dbiSeqno(dbiIndex dbi, /*@null@*/ int64_t * seqnop, unsigned int flags) 00787 /*@globals fileSystem @*/ 00788 /*@modifies dbi, *seqnop, fileSystem @*/ 00789 { 00790 return (*dbi->dbi_vec->seqno) (dbi, seqnop, flags); 00791 } 00792 00801 /*@unused@*/ static inline 00802 int dbiAssociate(dbiIndex dbi, dbiIndex dbisecondary, 00803 int (*callback) (DB *, const DBT *, const DBT *, DBT *), 00804 unsigned int flags) 00805 /*@globals fileSystem @*/ 00806 /*@modifies dbi, fileSystem @*/ 00807 { 00808 return (*dbi->dbi_vec->associate) (dbi, dbisecondary, callback, flags); 00809 } 00810 00819 /*@unused@*/ static inline 00820 int dbiJoin(dbiIndex dbi, DBC ** curslist, /*@out@*/ DBC ** dbcp, 00821 unsigned int flags) 00822 /*@globals fileSystem @*/ 00823 /*@modifies dbi, *dbcp, fileSystem @*/ 00824 { 00825 return (*dbi->dbi_vec->join) (dbi, curslist, dbcp, flags); 00826 } 00827 00833 /*@unused@*/ static inline 00834 int dbiByteSwapped(dbiIndex dbi) 00835 /*@modifies dbi @*/ 00836 { 00837 return (*dbi->dbi_vec->byteswapped) (dbi); 00838 } 00839 00846 /*@unused@*/ static inline 00847 int dbiStat(dbiIndex dbi, unsigned int flags) 00848 /*@modifies dbi @*/ 00849 { 00850 return (*dbi->dbi_vec->stat) (dbi, flags); 00851 } 00852 00858 /*@unused@*/ static inline /*@null@*/ 00859 DB_TXN * dbiTxnid(dbiIndex dbi) 00860 /*@*/ 00861 { 00862 rpmdb rpmdb = (dbi ? dbi->dbi_rpmdb : NULL); 00863 DB_TXN * _txn = (DB_TXN*)(rpmdb ? rpmdb->db_txn : NULL); 00864 return _txn; 00865 } 00866 00867 #if defined(_RPMDB_INTERNAL) 00868 00869 #if !defined(__LCLINT__) 00870 /*@unused@*/ static inline 00871 int rpmlkId(rpmdb rpmdb, uint32_t *_idp) 00872 { 00873 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00874 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080) 00875 ? dbenv->lock_id(dbenv, _idp) : ENOTSUP; 00876 if (_rpmdb_debug) 00877 fprintf(stderr, "<-- %s(%p,%p) id 0x%x rc %d\n", "dbenv->lock_id", dbenv, _idp, *_idp, rc); 00878 return rc; 00879 } 00880 00881 /*@unused@*/ static inline 00882 int rpmlkIdFree(rpmdb rpmdb, uint32_t _id) 00883 { 00884 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00885 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080) 00886 ? dbenv->lock_id_free(dbenv, _id) : ENOTSUP; 00887 if (_rpmdb_debug) 00888 fprintf(stderr, "<-- %s(%p,%u) rc %d\n", "dbenv->lock_id_free", dbenv, (unsigned)_id, rc); 00889 return rc; 00890 } 00891 00892 /*@unused@*/ static inline 00893 int rpmlkGet(rpmdb rpmdb, DBT * _object, uint32_t _lockmode, void * _lock) 00894 { 00895 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00896 uint32_t _locker = 0x12344321; 00897 uint32_t _flags = 0; 00898 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080) 00899 ? dbenv->lock_get(dbenv, _locker, _flags, _object, (db_lockmode_t)_lockmode, (DB_LOCK*)_lock) 00900 : ENOTSUP; 00901 if (_rpmdb_debug) 00902 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); 00903 return rc; 00904 } 00905 00906 /*@unused@*/ static inline 00907 int rpmlkPut(rpmdb rpmdb, void * _lock) 00908 { 00909 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00910 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080) 00911 ? dbenv->lock_put(dbenv, (DB_LOCK*)_lock) 00912 : ENOTSUP; 00913 if (_rpmdb_debug) 00914 fprintf(stderr, "<-- %s(%p,%p) rc %d\n", "dbenv->lock_put", dbenv, _lock, rc); 00915 return rc; 00916 } 00917 00918 /*@unused@*/ static inline 00919 int rpmlgcOpen(rpmdb rpmdb) 00920 { 00921 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00922 DB_LOGC * _logc = NULL; 00923 uint32_t _flags = 0; 00924 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100) 00925 ? dbenv->log_cursor(dbenv, &_logc, _flags) : ENOTSUP; 00926 rpmdb->db_logc = (!rc ? _logc : NULL); 00927 if (_rpmdb_debug) 00928 fprintf(stderr, "<-- %s(%p,%p,0x%x) logc %p rc %d\n", "dbenv->log_cursor", dbenv, &_logc, _flags, _logc, rc); 00929 return rc; 00930 } 00931 00932 /*@unused@*/ static inline 00933 int rpmlgcGet(rpmdb rpmdb, DB_LSN * _lsn, DBT * data, uint32_t flags) 00934 { 00935 DB_LOGC * _logc = rpmdb->db_logc; 00936 int rc = (_logc ? _logc->get(_logc, _lsn, data, flags) : ENOTSUP); 00937 if (_rpmdb_debug) 00938 fprintf(stderr, "<-- %s(%p,%p,%p,0x%x) rc %d\n", "logc->get", _logc, _lsn, data, flags, rc); 00939 return rc; 00940 } 00941 00942 /*@unused@*/ static inline 00943 int rpmlgcClose(rpmdb rpmdb) 00944 { 00945 DB_LOGC * _logc = rpmdb->db_logc; 00946 uint32_t _flags = 0; 00947 int rc = (_logc ? _logc->close(_logc, _flags) : ENOTSUP); 00948 rpmdb->db_logc = NULL; 00949 if (_rpmdb_debug) 00950 fprintf(stderr, "<-- %s(%p) rc %d\n", "logc->close", _logc, rc); 00951 return rc; 00952 } 00953 00954 /*@unused@*/ static inline 00955 int rpmlgcFile(rpmdb rpmdb, const DB_LSN * _lsn, char * name, size_t len) 00956 { 00957 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00958 int rc = dbenv->log_file(dbenv, _lsn, name, len); 00959 if (_rpmdb_debug) 00960 fprintf(stderr, "<-- %s(%p,%p,%p[%u]) \"%s\" rc %d\n", "dbenv->log_file", dbenv, _lsn, name, (unsigned)len, name, rc); 00961 return rc; 00962 } 00963 00964 /*@unused@*/ static inline 00965 int rpmlgcFlush(rpmdb rpmdb, const DB_LSN * _lsn) 00966 { 00967 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00968 int rc = dbenv->log_flush(dbenv, _lsn); 00969 if (_rpmdb_debug) 00970 fprintf(stderr, "<-- %s(%p,%p) rc %d\n", "dbenv->log_flush", dbenv, _lsn, rc); 00971 return rc; 00972 } 00973 00974 /*@unused@*/ static inline 00975 int rpmlgcPrintf(rpmdb rpmdb, const char * fmt, void *_A1, void *_A2, void *_A3, void *_A4, void *_A5) 00976 { 00977 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00978 DB_TXN * _txnid = (DB_TXN*)rpmdb->db_txn; 00979 int rc = dbenv->log_printf(dbenv, _txnid, fmt, _A1, _A2, _A3, _A4, _A5); 00980 if (_rpmdb_debug) 00981 fprintf(stderr, "<-- %s(%p,%p,\"%s\", ...) rc %d\n", "dbenv->log_printf", dbenv, _txnid, fmt, rc); 00982 return rc; 00983 } 00984 00985 /*@unused@*/ static inline 00986 int rpmlgcPut(rpmdb rpmdb, DB_LSN * _lsn, const DBT * data, uint32_t flags) 00987 { 00988 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00989 int rc = dbenv->log_put(dbenv, _lsn, data, flags); 00990 if (_rpmdb_debug) 00991 fprintf(stderr, "<-- %s(%p,%p,%p,0x%x) rc %d\n", "dbenv->log_put", dbenv, _lsn, data, flags, rc); 00992 return rc; 00993 } 00994 00995 /*@unused@*/ static inline 00996 int rpmmpfSyncAll(rpmdb rpmdb) 00997 { 00998 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00999 DB_LSN * _lsn = NULL; 01000 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100) 01001 ? dbenv->memp_sync(dbenv, _lsn) : ENOTSUP; 01002 if (_rpmdb_debug) 01003 fprintf(stderr, "<-- %s(%p,%p) rc %d\n", "dbenv->memp_sync", dbenv, _lsn, rc); 01004 return rc; 01005 } 01006 01007 /*@unused@*/ static inline 01008 int rpmmpfTrickle(rpmdb rpmdb) 01009 { 01010 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 01011 int _percent = 20; 01012 int _nwrote = 0; 01013 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100) 01014 ? dbenv->memp_trickle(dbenv, _percent, &_nwrote) : ENOTSUP; 01015 if (_rpmdb_debug) 01016 fprintf(stderr, "<-- %s(%p,%d) nwrote %d rc %d\n", "dbenv->memp_trickle", dbenv, _percent, _nwrote, rc); 01017 return rc; 01018 } 01019 01020 /*@unused@*/ static inline 01021 int rpmmpfClose(rpmdb rpmdb) 01022 { 01023 DB_MPOOLFILE * mpf = rpmdb->db_mpf; 01024 uint32_t _flags = 0; 01025 int rc = (mpf ? mpf->close(mpf, _flags) : ENOTSUP); 01026 rpmdb->db_mpf = NULL; 01027 if (_rpmdb_debug) 01028 fprintf(stderr, "<-- %s(%p) rc %d\n", "mpf->close", mpf, rc); 01029 return rc; 01030 } 01031 01032 /*@unused@*/ static inline 01033 int rpmmpfGet(rpmdb rpmdb, uint32_t * _pgnop, uint32_t _flags, void ** _pagep) 01034 { 01035 DB_MPOOLFILE * mpf = rpmdb->db_mpf; 01036 DB_TXN * _txnid = (DB_TXN*)rpmdb->db_txn; 01037 int rc = mpf->get(mpf, _pgnop, _txnid, _flags, _pagep); 01038 if (_rpmdb_debug) 01039 fprintf(stderr, "<-- %s(%p,%p,%p,0x%x,%p) rc %d\n", "mpf->get", mpf, _pgnop, _txnid, _flags, _pagep, rc); 01040 return rc; 01041 } 01042 01043 /*@unused@*/ static inline 01044 int rpmmpfOpen(rpmdb rpmdb, /*@null@*/ const char * fn, uint32_t flags) 01045 { 01046 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 01047 DB_MPOOLFILE * mpf = NULL; 01048 int _perms = rpmdb->_dbi[0]->dbi_perms; 01049 size_t _pagesize = BUFSIZ; 01050 uint32_t _fcreate_flags = 0; 01051 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100) 01052 ? dbenv->memp_fcreate(dbenv, &mpf, _fcreate_flags) : ENOTSUP; 01053 01054 if (_rpmdb_debug) 01055 fprintf(stderr, "<-- %s(%p,&mpf,0x%x) mpf %p rc %d\n", "dbenv->memp_fcreate", dbenv, _fcreate_flags, mpf, rc); 01056 if (rc) goto exit; 01057 rc = mpf->open(mpf, fn, flags, _perms, _pagesize); 01058 rpmdb->db_mpf = (!rc ? mpf : NULL); /* FIXME: mpf memleak */ 01059 if (_rpmdb_debug) 01060 fprintf(stderr, "<-- %s(%p,%s,0x%x) rc %d\n", "mpf->open", mpf, fn, flags, rc); 01061 01062 exit: 01063 return rc; 01064 } 01065 01066 /*@unused@*/ static inline 01067 int rpmmpfPut(rpmdb rpmdb, void * _page, uint32_t flags) 01068 { 01069 DB_MPOOLFILE * mpf = rpmdb->db_mpf; 01070 uint32_t _priority = DB_PRIORITY_DEFAULT; 01071 int rc = mpf->put(mpf, _page, (DB_CACHE_PRIORITY)_priority, flags); 01072 if (_rpmdb_debug) 01073 fprintf(stderr, "<-- %s(%p,%p,0x%x,0x%x) rc %d\n", "mpf->put", mpf, _page, _priority, flags, rc); 01074 return rc; 01075 } 01076 01077 /*@unused@*/ static inline 01078 int rpmmpfSync(rpmdb rpmdb) 01079 { 01080 DB_MPOOLFILE * mpf = rpmdb->db_mpf; 01081 int rc = (mpf ? mpf->sync(mpf) : ENOTSUP); 01082 if (_rpmdb_debug) 01083 fprintf(stderr, "<-- %s(%p) rc %d\n", "mpf->close", mpf, rc); 01084 return rc; 01085 } 01086 #endif /* __LCLINT__ */ 01087 01088 #endif /* _RPMDB_INTERNAL */ 01089 /*@=globuse =mustmod @*/ 01090 #endif /* !defined(SWIG) */ 01091 01092 /*@=exportlocal@*/ 01093 01099 /*@null@*/ 01100 dbiIndexSet dbiFreeIndexSet(/*@only@*/ /*@null@*/ dbiIndexSet set) 01101 /*@modifies set @*/; 01102 01108 unsigned int dbiIndexSetCount(dbiIndexSet set) 01109 /*@*/; 01110 01117 uint32_t dbiIndexRecordOffset(dbiIndexSet set, unsigned int recno) 01118 /*@*/; 01119 01126 uint32_t dbiIndexRecordFileNumber(dbiIndexSet set, unsigned int recno) 01127 /*@*/; 01128 #endif /* defined(_RPMDB_INTERNAL) */ 01129 01136 /*@unused@*/ /*@null@*/ 01137 rpmdb rpmdbUnlink (/*@killref@*/ /*@only@*/ rpmdb db, const char * msg) 01138 /*@modifies db @*/; 01139 #define rpmdbUnlink(_db, _msg) \ 01140 ((rpmdb)rpmioUnlinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__)) 01141 01148 /*@unused@*/ /*@newref@*/ 01149 rpmdb rpmdbLink (rpmdb db, const char * msg) 01150 /*@modifies db @*/; 01151 #define rpmdbLink(_db, _msg) \ 01152 ((void *)rpmioLinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__)) 01153 01156 /*@only@*/ /*@null@*/ 01157 rpmdb rpmdbNew(/*@kept@*/ /*@null@*/ const char * root, 01158 /*@kept@*/ /*@null@*/ const char * home, 01159 int mode, mode_t perms, int flags) 01160 /*@globals fileSystem, internalState @*/ 01161 /*@modifies fileSystem, internalState @*/; 01162 01171 int rpmdbOpen(/*@null@*/ const char * prefix, /*@null@*/ /*@out@*/ rpmdb * dbp, 01172 int mode, mode_t perms) 01173 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01174 /*@modifies *dbp, rpmGlobalMacroContext, fileSystem, internalState @*/; 01175 01182 int rpmdbBlockDBI(/*@null@*/ rpmdb db, int tag) 01183 /*@modifies db @*/; 01184 01191 int rpmdbCloseDBI(/*@null@*/ rpmdb db, int tag) 01192 /*@globals fileSystem @*/ 01193 /*@modifies db, fileSystem @*/; 01194 01200 int rpmdbClose (/*@killref@*/ /*@only@*/ /*@null@*/ rpmdb db) 01201 /*@globals fileSystem @*/ 01202 /*@modifies db, fileSystem @*/; 01203 01209 /*@-exportlocal@*/ 01210 int rpmdbOpenAll (/*@null@*/ rpmdb db) 01211 /*@globals rpmGlobalMacroContext, h_errno, internalState @*/ 01212 /*@modifies db, rpmGlobalMacroContext, internalState @*/; 01213 /*@=exportlocal@*/ 01214 01223 int rpmdbCount(/*@null@*/ rpmdb db, rpmTag tag, 01224 const void * keyp, size_t keylen) 01225 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01226 /*@modifies db, rpmGlobalMacroContext, fileSystem, internalState @*/; 01227 01234 int rpmdbCountPackages(/*@null@*/ rpmdb db, const char * N) 01235 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01236 /*@modifies db, rpmGlobalMacroContext, fileSystem, internalState @*/; 01237 01243 uint32_t rpmmiInstance(/*@null@*/ rpmmi mi) 01244 /*@*/; 01245 01251 uint32_t rpmmiBNTag(/*@null@*/ rpmmi mi) 01252 /*@*/; 01253 01259 unsigned int rpmmiCount(/*@null@*/ rpmmi mi) 01260 /*@*/; 01261 01269 int rpmmiGrow(/*@null@*/ rpmmi mi, 01270 /*@null@*/ const uint32_t * hdrNums, int nHdrNums) 01271 /*@modifies mi @*/; 01272 01279 int rpmmiGrowBasename(rpmmi mi, const char * bn) 01280 /*@modifies mi @*/; 01281 01287 int rpmmiSort(/*@null@*/ rpmmi mi) 01288 /*@modifies mi @*/; 01289 01299 int rpmmiPrune(/*@null@*/ rpmmi mi, 01300 /*@null@*/ uint32_t * hdrNums, int nHdrNums, int sorted) 01301 /*@modifies mi, hdrNums @*/; 01302 01311 int rpmmiAddPattern(/*@null@*/ rpmmi mi, rpmTag tag, 01312 rpmMireMode mode, /*@null@*/ const char * pattern) 01313 /*@globals rpmGlobalMacroContext, h_errno, internalState @*/ 01314 /*@modifies mi, mode, rpmGlobalMacroContext, internalState @*/; 01315 01323 int rpmmiSetRewrite(/*@null@*/ rpmmi mi, int rewrite) 01324 /*@modifies mi @*/; 01325 01332 int rpmmiSetModified(/*@null@*/ rpmmi mi, int modified) 01333 /*@modifies mi @*/; 01334 01343 /*@only@*/ /*@null@*/ 01344 rpmmi rpmmiInit(/*@null@*/ rpmdb db, rpmTag tag, 01345 /*@null@*/ const void * keyp, size_t keylen) 01346 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01347 /*@modifies db, rpmGlobalMacroContext, fileSystem, internalState @*/; 01348 01354 /*@null@*/ 01355 Header rpmmiNext(/*@null@*/ rpmmi mi) 01356 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01357 /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/; 01358 01368 /*@mayexit@*/ 01369 int rpmdbCheckTerminate(int terminate) 01370 /*@globals fileSystem, internalState @*/ 01371 /*@modifies fileSystem, internalState @*/; 01372 01376 /*@mayexit@*/ 01377 int rpmdbCheckSignals(void) 01378 /*@globals fileSystem, internalState @*/ 01379 /*@modifies fileSystem, internalState @*/; 01380 01386 /*@null@*/ 01387 rpmmi rpmmiUnlink(/*@only@*/ /*@null@*/rpmmi mi) 01388 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01389 /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/; 01390 #define rpmmiUnlink(_mi) \ 01391 ((rpmmi)rpmioUnlinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__)) 01392 01398 /*@null@*/ 01399 rpmmi rpmmiLink(/*@only@*/ /*@null@*/rpmmi mi) 01400 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01401 /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/; 01402 #define rpmmiLink(_mi) \ 01403 ((rpmmi)rpmioLinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__)) 01404 01410 /*@null@*/ 01411 rpmmi rpmmiFree(/*@only@*/ /*@null@*/rpmmi mi) 01412 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01413 /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/; 01414 #define rpmmiFree(_mi) \ 01415 ((rpmmi)rpmioFreePoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__)) 01416 01426 int rpmdbMireApply(rpmdb db, rpmTag tag, rpmMireMode mode, const char * pat, 01427 const char *** argvp) 01428 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01429 /*@modifies db, *argvp, 01430 rpmGlobalMacroContext, fileSystem, internalState @*/; 01431 01440 int rpmdbAdd(/*@null@*/ rpmdb db, int iid, Header h, /*@null@*/ rpmts ts) 01441 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01442 /*@modifies db, h, ts, 01443 rpmGlobalMacroContext, fileSystem, internalState @*/; 01444 01453 int rpmdbRemove(/*@null@*/ rpmdb db, /*@unused@*/ int rid, uint32_t hdrNum, 01454 /*@null@*/ rpmts ts) 01455 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01456 /*@modifies db, ts, 01457 rpmGlobalMacroContext, fileSystem, internalState @*/; 01458 01462 /*@unused@*/ 01463 int rpm_mergesort(void *base, size_t nmemb, size_t size, 01464 int (*cmp) (const void *, const void *)) 01465 /*@globals errno @*/ 01466 /*@modifies base, errno @*/; 01467 01468 #ifdef __cplusplus 01469 } 01470 #endif 01471 01472 /*@=bounds@*/ 01473 #endif /* H_RPMDB */