|
rpm
5.4.4
|
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 <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 int dbi_heapsize; 00393 /*@unused@*/ /*@null@*/ 00394 void * (*dbi_malloc) (size_t nbytes) 00395 /*@*/; 00396 /* hash access parameters */ 00397 unsigned int dbi_h_ffactor; 00398 unsigned int (*dbi_h_hash_fcn) (DB *, const void *bytes, 00399 unsigned int length) 00400 /*@*/; 00401 unsigned int dbi_h_nelem; 00402 unsigned int dbi_h_flags; 00403 int (*dbi_h_dup_compare_fcn) (DB *, const DBT *, const DBT *) 00404 /*@*/; 00405 /* btree access parameters */ 00406 int dbi_bt_flags; 00407 int dbi_bt_minkey; 00408 int (*dbi_bt_compare_fcn) (DB *, const DBT *, const DBT *) 00409 /*@*/; 00410 int (*dbi_bt_dup_compare_fcn) (DB *, const DBT *, const DBT *) 00411 /*@*/; 00412 size_t (*dbi_bt_prefix_fcn) (DB *, const DBT *, const DBT *) 00413 /*@*/; 00414 /* recno access parameters */ 00415 int dbi_re_flags; 00416 int dbi_re_delim; 00417 unsigned int dbi_re_len; 00418 int dbi_re_pad; 00419 const char * dbi_re_source; 00420 /* queue access parameters */ 00421 unsigned int dbi_q_extentsize; 00422 00423 /*@null@*/ 00424 const char * dbi_primary; 00425 /*@null@*/ 00426 const char * dbi_foreign; 00427 00428 /*@refcounted@*/ 00429 rpmdb dbi_rpmdb; 00430 rpmTag dbi_rpmtag; 00431 size_t dbi_jlen; 00433 /*@only@*/ /*@relnull@*/ 00434 DB_SEQUENCE * dbi_seq; 00435 /*@only@*/ /*@relnull@*/ 00436 DB * dbi_db; 00437 /*@only@*/ /*@null@*/ 00438 DB_TXN * dbi_txnid; 00439 /*@only@*/ /*@null@*/ 00440 void * dbi_stats; 00442 /*@observer@*/ 00443 const struct _dbiVec * dbi_vec; 00445 }; 00446 #endif /* !defined(SWIG) */ 00447 00451 struct rpmdb_s { 00452 struct rpmioItem_s _item; 00453 /*@owned@*/ /*@relnull@*/ 00454 const char * db_root; 00455 /*@owned@*/ 00456 const char * db_home; 00457 int db_flags; 00458 int db_mode; 00459 int db_perms; 00460 int db_api; 00461 /*@owned@*/ 00462 const char * db_errpfx; 00464 int db_remove_env; 00465 uint32_t db_maxkey; 00467 int db_chrootDone; 00468 void (*db_errcall) (const char * db_errpfx, char * buffer) 00469 /*@*/; 00470 /*@shared@*/ 00471 FILE * db_errfile; 00472 /*@only@*/ 00473 void * (*db_malloc) (size_t nbytes) 00474 /*@*/; 00475 /*@only@*/ 00476 void * (*db_realloc) (/*@only@*//*@null@*/ void * ptr, size_t nbytes) 00477 /*@*/; 00478 void (*db_free) (/*@only@*/ void * ptr) 00479 /*@modifies *ptr @*/; 00480 00481 int (*db_export) (rpmdb db, Header h, int adding); 00482 00483 /*@refcounted@*/ 00484 Header db_h; 00486 rpmdb db_next; 00487 int db_opens; 00489 void * db_dbenv; 00490 void * db_txn; 00491 DB_LOGC * db_logc; 00492 DB_MPOOLFILE *db_mpf; 00494 tagStore_t db_tags; 00495 size_t db_ndbi; 00496 /*@only@*/ /*@null@*/ 00497 dbiIndex * _dbi; 00499 struct rpmop_s db_getops; 00500 struct rpmop_s db_putops; 00501 struct rpmop_s db_delops; 00503 #if defined(__LCLINT__) 00504 /*@refs@*/ 00505 int nrefs; 00506 #endif 00507 }; 00508 #endif /* defined(_RPMDB_INTERNAL) */ 00509 00510 #ifdef __cplusplus 00511 extern "C" { 00512 #endif 00513 00514 #if defined(_RPMDB_INTERNAL) 00515 /*@-exportlocal@*/ 00516 #if defined(WITH_DB) || defined(WITH_SQLITE) 00517 00523 /*@unused@*/ /*@only@*/ /*@null@*/ 00524 dbiIndex db3New(rpmdb rpmdb, rpmTag tag) 00525 /*@globals rpmGlobalMacroContext, h_errno, internalState @*/ 00526 /*@modifies rpmGlobalMacroContext, internalState @*/; 00527 00533 /*@null@*/ 00534 dbiIndex db3Free(/*@only@*/ /*@null@*/ dbiIndex dbi) 00535 /*@globals fileSystem, internalState @*/ 00536 /*@modifies dbi, fileSystem, internalState @*/; 00537 #define db3Free(_dbi) \ 00538 ((dbiIndex)rpmioFreePoolItem((rpmioItem)(_dbi), __FUNCTION__, __FILE__, __LINE__)) 00539 00546 /*@-redecl@*/ 00547 /*@exposed@*/ 00548 extern const char * prDbiOpenFlags(int dbflags, int print_dbenv_flags) 00549 /*@*/; 00550 /*@=redecl@*/ 00551 #endif 00552 00560 /*@only@*/ /*@null@*/ dbiIndex dbiOpen(/*@null@*/ rpmdb db, rpmTag tag, 00561 unsigned int flags) 00562 /*@globals rpmGlobalMacroContext, errno, h_errno, internalState @*/ 00563 /*@modifies db, rpmGlobalMacroContext, errno, internalState @*/; 00564 00571 void * dbiStatsAccumulator(dbiIndex dbi, int opx) 00572 /*@*/; 00573 00574 #if !defined(SWIG) 00575 /*@-globuse -mustmod @*/ /* FIX: vector annotations */ 00584 /*@unused@*/ static inline 00585 int dbiCopen(dbiIndex dbi, /*@null@*/ DB_TXN * txnid, 00586 /*@out@*/ DBC ** dbcp, unsigned int flags) 00587 /*@globals fileSystem @*/ 00588 /*@modifies dbi, *dbcp, fileSystem @*/ 00589 { 00590 return (*dbi->dbi_vec->copen) (dbi, txnid, dbcp, flags); 00591 } 00592 00600 /*@unused@*/ static inline 00601 int dbiCclose(dbiIndex dbi, /*@only@*/ DBC * dbcursor, unsigned int flags) 00602 /*@globals fileSystem @*/ 00603 /*@modifies dbi, *dbcursor, fileSystem @*/ 00604 { 00605 return (*dbi->dbi_vec->cclose) (dbi, dbcursor, flags); 00606 } 00607 00616 /*@unused@*/ static inline 00617 int dbiCdup(dbiIndex dbi, DBC * dbcursor, /*@out@*/ DBC ** dbcp, 00618 unsigned int flags) 00619 /*@modifies dbi, *dbcp @*/ 00620 { 00621 return (*dbi->dbi_vec->cdup) (dbi, dbcursor, dbcp, flags); 00622 } 00623 00633 /*@unused@*/ static inline 00634 int dbiDel(dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data, 00635 unsigned int flags) 00636 /*@globals fileSystem, internalState @*/ 00637 /*@modifies dbi, *dbcursor, fileSystem, internalState @*/ 00638 { 00639 rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 16); /* RPMTS_OP_DBDEL */ 00640 int rc; 00641 assert(key->data != NULL && key->size > 0); 00642 (void) rpmswEnter(sw, 0); 00643 rc = (dbi->dbi_vec->cdel) (dbi, dbcursor, key, data, flags); 00644 (void) rpmswExit(sw, data->size); 00645 return rc; 00646 } 00647 00657 /*@unused@*/ static inline 00658 int dbiGet(dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data, 00659 unsigned int flags) 00660 /*@globals fileSystem, internalState @*/ 00661 /*@modifies dbi, *dbcursor, *key, *data, fileSystem, internalState @*/ 00662 { 00663 rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 14); /* RPMTS_OP_DBGET */ 00664 int rc; 00665 (void) rpmswEnter(sw, 0); 00666 rc = (dbi->dbi_vec->cget) (dbi, dbcursor, key, data, flags); 00667 (void) rpmswExit(sw, data->size); 00668 return rc; 00669 } 00670 00681 /*@unused@*/ static inline 00682 int dbiPget(dbiIndex dbi, /*@null@*/ DBC * dbcursor, 00683 DBT * key, DBT * pkey, DBT * data, unsigned int flags) 00684 /*@globals fileSystem, internalState @*/ 00685 /*@modifies dbi, *dbcursor, *key, *pkey, *data, fileSystem, internalState @*/ 00686 { 00687 rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 14); /* RPMTS_OP_DBGET */ 00688 int rc; 00689 (void) rpmswEnter(sw, 0); 00690 rc = (dbi->dbi_vec->cpget) (dbi, dbcursor, key, pkey, data, flags); 00691 (void) rpmswExit(sw, data->size); 00692 return rc; 00693 } 00694 00704 /*@unused@*/ static inline 00705 int dbiPut(dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data, 00706 unsigned int flags) 00707 /*@globals fileSystem, internalState @*/ 00708 /*@modifies dbi, *dbcursor, *key, fileSystem, internalState @*/ 00709 { 00710 rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 15); /* RPMTS_OP_DBPUT */ 00711 int rc; 00712 assert(key->data != NULL && key->size > 0 && data->data != NULL && data->size > 0); 00713 (void) rpmswEnter(sw, 0); 00714 rc = (dbi->dbi_vec->cput) (dbi, dbcursor, key, data, flags); 00715 (void) rpmswExit(sw, data->size); 00716 return rc; 00717 } 00718 00727 /*@unused@*/ static inline 00728 int dbiCount(dbiIndex dbi, DBC * dbcursor, /*@out@*/ unsigned int * countp, 00729 unsigned int flags) 00730 /*@globals fileSystem @*/ 00731 /*@modifies *dbcursor, fileSystem @*/ 00732 { 00733 return (*dbi->dbi_vec->ccount) (dbi, dbcursor, countp, flags); 00734 } 00735 00742 /*@unused@*/ static inline 00743 int dbiClose(/*@only@*/ dbiIndex dbi, unsigned int flags) 00744 /*@globals fileSystem @*/ 00745 /*@modifies dbi, fileSystem @*/ 00746 { 00747 return (*dbi->dbi_vec->close) (dbi, flags); 00748 } 00749 00756 /*@unused@*/ static inline 00757 int dbiSync (dbiIndex dbi, unsigned int flags) 00758 /*@globals fileSystem @*/ 00759 /*@modifies fileSystem @*/ 00760 { 00761 return (*dbi->dbi_vec->sync) (dbi, flags); 00762 } 00763 00771 /*@unused@*/ static inline 00772 int dbiExists(dbiIndex dbi, /*@out@*/ DBT * key, unsigned int flags) 00773 /*@globals fileSystem @*/ 00774 /*@modifies dbi, fileSystem @*/ 00775 { 00776 return (*dbi->dbi_vec->exists) (dbi, key, flags); 00777 } 00778 00786 /*@unused@*/ static inline 00787 int dbiSeqno(dbiIndex dbi, /*@null@*/ int64_t * seqnop, unsigned int flags) 00788 /*@globals fileSystem @*/ 00789 /*@modifies dbi, *seqnop, fileSystem @*/ 00790 { 00791 return (*dbi->dbi_vec->seqno) (dbi, seqnop, flags); 00792 } 00793 00802 /*@unused@*/ static inline 00803 int dbiAssociate(dbiIndex dbi, dbiIndex dbisecondary, 00804 int (*callback) (DB *, const DBT *, const DBT *, DBT *), 00805 unsigned int flags) 00806 /*@globals fileSystem @*/ 00807 /*@modifies dbi, fileSystem @*/ 00808 { 00809 return (*dbi->dbi_vec->associate) (dbi, dbisecondary, callback, flags); 00810 } 00811 00820 /*@unused@*/ static inline 00821 int dbiJoin(dbiIndex dbi, DBC ** curslist, /*@out@*/ DBC ** dbcp, 00822 unsigned int flags) 00823 /*@globals fileSystem @*/ 00824 /*@modifies dbi, *dbcp, fileSystem @*/ 00825 { 00826 return (*dbi->dbi_vec->join) (dbi, curslist, dbcp, flags); 00827 } 00828 00834 /*@unused@*/ static inline 00835 int dbiByteSwapped(dbiIndex dbi) 00836 /*@modifies dbi @*/ 00837 { 00838 return (*dbi->dbi_vec->byteswapped) (dbi); 00839 } 00840 00847 /*@unused@*/ static inline 00848 int dbiStat(dbiIndex dbi, unsigned int flags) 00849 /*@modifies dbi @*/ 00850 { 00851 return (*dbi->dbi_vec->stat) (dbi, flags); 00852 } 00853 00859 /*@unused@*/ static inline /*@null@*/ 00860 DB_TXN * dbiTxnid(dbiIndex dbi) 00861 /*@*/ 00862 { 00863 rpmdb rpmdb = (dbi ? dbi->dbi_rpmdb : NULL); 00864 DB_TXN * _txn = (DB_TXN*)(rpmdb ? rpmdb->db_txn : NULL); 00865 return _txn; 00866 } 00867 00868 #if defined(_RPMDB_INTERNAL) 00869 00870 #if !defined(__LCLINT__) 00871 /*@unused@*/ static inline 00872 int rpmlkId(rpmdb rpmdb, uint32_t *_idp) 00873 { 00874 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00875 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080) 00876 ? dbenv->lock_id(dbenv, _idp) : ENOTSUP; 00877 if (_rpmdb_debug) 00878 fprintf(stderr, "<-- %s(%p,%p) id 0x%x rc %d\n", "dbenv->lock_id", dbenv, _idp, *_idp, rc); 00879 return rc; 00880 } 00881 00882 /*@unused@*/ static inline 00883 int rpmlkIdFree(rpmdb rpmdb, uint32_t _id) 00884 { 00885 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00886 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080) 00887 ? dbenv->lock_id_free(dbenv, _id) : ENOTSUP; 00888 if (_rpmdb_debug) 00889 fprintf(stderr, "<-- %s(%p,%u) rc %d\n", "dbenv->lock_id_free", dbenv, (unsigned)_id, rc); 00890 return rc; 00891 } 00892 00893 /*@unused@*/ static inline 00894 int rpmlkGet(rpmdb rpmdb, DBT * _object, uint32_t _lockmode, void * _lock) 00895 { 00896 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00897 uint32_t _locker = 0x12344321; 00898 uint32_t _flags = 0; 00899 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080) 00900 ? dbenv->lock_get(dbenv, _locker, _flags, _object, (db_lockmode_t)_lockmode, (DB_LOCK*)_lock) 00901 : ENOTSUP; 00902 if (_rpmdb_debug) 00903 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); 00904 return rc; 00905 } 00906 00907 /*@unused@*/ static inline 00908 int rpmlkPut(rpmdb rpmdb, void * _lock) 00909 { 00910 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00911 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x080) 00912 ? dbenv->lock_put(dbenv, (DB_LOCK*)_lock) 00913 : ENOTSUP; 00914 if (_rpmdb_debug) 00915 fprintf(stderr, "<-- %s(%p,%p) rc %d\n", "dbenv->lock_put", dbenv, _lock, rc); 00916 return rc; 00917 } 00918 00919 /*@unused@*/ static inline 00920 int rpmlgcOpen(rpmdb rpmdb) 00921 { 00922 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00923 DB_LOGC * _logc = NULL; 00924 uint32_t _flags = 0; 00925 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100) 00926 ? dbenv->log_cursor(dbenv, &_logc, _flags) : ENOTSUP; 00927 rpmdb->db_logc = (!rc ? _logc : NULL); 00928 if (_rpmdb_debug) 00929 fprintf(stderr, "<-- %s(%p,%p,0x%x) logc %p rc %d\n", "dbenv->log_cursor", dbenv, &_logc, _flags, _logc, rc); 00930 return rc; 00931 } 00932 00933 /*@unused@*/ static inline 00934 int rpmlgcGet(rpmdb rpmdb, DB_LSN * _lsn, DBT * data, uint32_t flags) 00935 { 00936 DB_LOGC * _logc = rpmdb->db_logc; 00937 int rc = (_logc ? _logc->get(_logc, _lsn, data, flags) : ENOTSUP); 00938 if (_rpmdb_debug) 00939 fprintf(stderr, "<-- %s(%p,%p,%p,0x%x) rc %d\n", "logc->get", _logc, _lsn, data, flags, rc); 00940 return rc; 00941 } 00942 00943 /*@unused@*/ static inline 00944 int rpmlgcClose(rpmdb rpmdb) 00945 { 00946 DB_LOGC * _logc = rpmdb->db_logc; 00947 uint32_t _flags = 0; 00948 int rc = (_logc ? _logc->close(_logc, _flags) : ENOTSUP); 00949 rpmdb->db_logc = NULL; 00950 if (_rpmdb_debug) 00951 fprintf(stderr, "<-- %s(%p) rc %d\n", "logc->close", _logc, rc); 00952 return rc; 00953 } 00954 00955 /*@unused@*/ static inline 00956 int rpmlgcFile(rpmdb rpmdb, const DB_LSN * _lsn, char * name, size_t len) 00957 { 00958 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00959 int rc = dbenv->log_file(dbenv, _lsn, name, len); 00960 if (_rpmdb_debug) 00961 fprintf(stderr, "<-- %s(%p,%p,%p[%u]) \"%s\" rc %d\n", "dbenv->log_file", dbenv, _lsn, name, (unsigned)len, name, rc); 00962 return rc; 00963 } 00964 00965 /*@unused@*/ static inline 00966 int rpmlgcFlush(rpmdb rpmdb, const DB_LSN * _lsn) 00967 { 00968 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00969 int rc = dbenv->log_flush(dbenv, _lsn); 00970 if (_rpmdb_debug) 00971 fprintf(stderr, "<-- %s(%p,%p) rc %d\n", "dbenv->log_flush", dbenv, _lsn, rc); 00972 return rc; 00973 } 00974 00975 /*@unused@*/ static inline 00976 int rpmlgcPrintf(rpmdb rpmdb, const char * fmt, void *_A1, void *_A2, void *_A3, void *_A4, void *_A5) 00977 { 00978 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00979 DB_TXN * _txnid = (DB_TXN*)rpmdb->db_txn; 00980 int rc = dbenv->log_printf(dbenv, _txnid, fmt, _A1, _A2, _A3, _A4, _A5); 00981 if (_rpmdb_debug) 00982 fprintf(stderr, "<-- %s(%p,%p,\"%s\", ...) rc %d\n", "dbenv->log_printf", dbenv, _txnid, fmt, rc); 00983 return rc; 00984 } 00985 00986 /*@unused@*/ static inline 00987 int rpmlgcPut(rpmdb rpmdb, DB_LSN * _lsn, const DBT * data, uint32_t flags) 00988 { 00989 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 00990 int rc = dbenv->log_put(dbenv, _lsn, data, flags); 00991 if (_rpmdb_debug) 00992 fprintf(stderr, "<-- %s(%p,%p,%p,0x%x) rc %d\n", "dbenv->log_put", dbenv, _lsn, data, flags, rc); 00993 return rc; 00994 } 00995 00996 /*@unused@*/ static inline 00997 int rpmmpfSyncAll(rpmdb rpmdb) 00998 { 00999 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 01000 DB_LSN * _lsn = NULL; 01001 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100) 01002 ? dbenv->memp_sync(dbenv, _lsn) : ENOTSUP; 01003 if (_rpmdb_debug) 01004 fprintf(stderr, "<-- %s(%p,%p) rc %d\n", "dbenv->memp_sync", dbenv, _lsn, rc); 01005 return rc; 01006 } 01007 01008 /*@unused@*/ static inline 01009 int rpmmpfTrickle(rpmdb rpmdb) 01010 { 01011 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 01012 int _percent = 20; 01013 int _nwrote = 0; 01014 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100) 01015 ? dbenv->memp_trickle(dbenv, _percent, &_nwrote) : ENOTSUP; 01016 if (_rpmdb_debug) 01017 fprintf(stderr, "<-- %s(%p,%d) nwrote %d rc %d\n", "dbenv->memp_trickle", dbenv, _percent, _nwrote, rc); 01018 return rc; 01019 } 01020 01021 /*@unused@*/ static inline 01022 int rpmmpfClose(rpmdb rpmdb) 01023 { 01024 DB_MPOOLFILE * mpf = rpmdb->db_mpf; 01025 uint32_t _flags = 0; 01026 int rc = (mpf ? mpf->close(mpf, _flags) : ENOTSUP); 01027 rpmdb->db_mpf = NULL; 01028 if (_rpmdb_debug) 01029 fprintf(stderr, "<-- %s(%p) rc %d\n", "mpf->close", mpf, rc); 01030 return rc; 01031 } 01032 01033 /*@unused@*/ static inline 01034 int rpmmpfGet(rpmdb rpmdb, uint32_t * _pgnop, uint32_t _flags, void ** _pagep) 01035 { 01036 DB_MPOOLFILE * mpf = rpmdb->db_mpf; 01037 DB_TXN * _txnid = (DB_TXN*)rpmdb->db_txn; 01038 int rc = mpf->get(mpf, _pgnop, _txnid, _flags, _pagep); 01039 if (_rpmdb_debug) 01040 fprintf(stderr, "<-- %s(%p,%p,%p,0x%x,%p) rc %d\n", "mpf->get", mpf, _pgnop, _txnid, _flags, _pagep, rc); 01041 return rc; 01042 } 01043 01044 /*@unused@*/ static inline 01045 int rpmmpfOpen(rpmdb rpmdb, /*@null@*/ const char * fn, uint32_t flags) 01046 { 01047 DB_ENV * dbenv = (DB_ENV*)rpmdb->db_dbenv; 01048 DB_MPOOLFILE * mpf = NULL; 01049 int _perms = rpmdb->_dbi[0]->dbi_perms; 01050 size_t _pagesize = BUFSIZ; 01051 uint32_t _fcreate_flags = 0; 01052 int rc = (rpmdb->_dbi[0]->dbi_eflags & 0x100) 01053 ? dbenv->memp_fcreate(dbenv, &mpf, _fcreate_flags) : ENOTSUP; 01054 01055 if (_rpmdb_debug) 01056 fprintf(stderr, "<-- %s(%p,&mpf,0x%x) mpf %p rc %d\n", "dbenv->memp_fcreate", dbenv, _fcreate_flags, mpf, rc); 01057 if (rc) goto exit; 01058 rc = mpf->open(mpf, fn, flags, _perms, _pagesize); 01059 rpmdb->db_mpf = (!rc ? mpf : NULL); /* FIXME: mpf memleak */ 01060 if (_rpmdb_debug) 01061 fprintf(stderr, "<-- %s(%p,%s,0x%x) rc %d\n", "mpf->open", mpf, fn, flags, rc); 01062 01063 exit: 01064 return rc; 01065 } 01066 01067 /*@unused@*/ static inline 01068 int rpmmpfPut(rpmdb rpmdb, void * _page, uint32_t flags) 01069 { 01070 DB_MPOOLFILE * mpf = rpmdb->db_mpf; 01071 uint32_t _priority = DB_PRIORITY_DEFAULT; 01072 int rc = mpf->put(mpf, _page, (DB_CACHE_PRIORITY)_priority, flags); 01073 if (_rpmdb_debug) 01074 fprintf(stderr, "<-- %s(%p,%p,0x%x,0x%x) rc %d\n", "mpf->put", mpf, _page, _priority, flags, rc); 01075 return rc; 01076 } 01077 01078 /*@unused@*/ static inline 01079 int rpmmpfSync(rpmdb rpmdb) 01080 { 01081 DB_MPOOLFILE * mpf = rpmdb->db_mpf; 01082 int rc = (mpf ? mpf->sync(mpf) : ENOTSUP); 01083 if (_rpmdb_debug) 01084 fprintf(stderr, "<-- %s(%p) rc %d\n", "mpf->close", mpf, rc); 01085 return rc; 01086 } 01087 #endif /* __LCLINT__ */ 01088 01089 #endif /* _RPMDB_INTERNAL */ 01090 /*@=globuse =mustmod @*/ 01091 #endif /* !defined(SWIG) */ 01092 01093 /*@=exportlocal@*/ 01094 01100 /*@null@*/ 01101 dbiIndexSet dbiFreeIndexSet(/*@only@*/ /*@null@*/ dbiIndexSet set) 01102 /*@modifies set @*/; 01103 01109 unsigned int dbiIndexSetCount(dbiIndexSet set) 01110 /*@*/; 01111 01118 uint32_t dbiIndexRecordOffset(dbiIndexSet set, unsigned int recno) 01119 /*@*/; 01120 01127 uint32_t dbiIndexRecordFileNumber(dbiIndexSet set, unsigned int recno) 01128 /*@*/; 01129 #endif /* defined(_RPMDB_INTERNAL) */ 01130 01137 /*@unused@*/ /*@null@*/ 01138 rpmdb rpmdbUnlink (/*@killref@*/ /*@only@*/ rpmdb db, const char * msg) 01139 /*@modifies db @*/; 01140 #define rpmdbUnlink(_db, _msg) \ 01141 ((rpmdb)rpmioUnlinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__)) 01142 01149 /*@unused@*/ /*@newref@*/ 01150 rpmdb rpmdbLink (rpmdb db, const char * msg) 01151 /*@modifies db @*/; 01152 #define rpmdbLink(_db, _msg) \ 01153 ((void *)rpmioLinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__)) 01154 01157 /*@only@*/ /*@null@*/ 01158 rpmdb rpmdbNew(/*@kept@*/ /*@null@*/ const char * root, 01159 /*@kept@*/ /*@null@*/ const char * home, 01160 int mode, mode_t perms, int flags) 01161 /*@globals fileSystem, internalState @*/ 01162 /*@modifies fileSystem, internalState @*/; 01163 01172 int rpmdbOpen(/*@null@*/ const char * prefix, /*@null@*/ /*@out@*/ rpmdb * dbp, 01173 int mode, mode_t perms) 01174 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01175 /*@modifies *dbp, rpmGlobalMacroContext, fileSystem, internalState @*/; 01176 01183 int rpmdbBlockDBI(/*@null@*/ rpmdb db, int tag) 01184 /*@modifies db @*/; 01185 01192 int rpmdbCloseDBI(/*@null@*/ rpmdb db, int tag) 01193 /*@globals fileSystem @*/ 01194 /*@modifies db, fileSystem @*/; 01195 01201 int rpmdbClose (/*@killref@*/ /*@only@*/ /*@null@*/ rpmdb db) 01202 /*@globals fileSystem @*/ 01203 /*@modifies db, fileSystem @*/; 01204 01210 /*@-exportlocal@*/ 01211 int rpmdbOpenAll (/*@null@*/ rpmdb db) 01212 /*@globals rpmGlobalMacroContext, h_errno, internalState @*/ 01213 /*@modifies db, rpmGlobalMacroContext, internalState @*/; 01214 /*@=exportlocal@*/ 01215 01224 int rpmdbCount(/*@null@*/ rpmdb db, rpmTag tag, 01225 const void * keyp, size_t keylen) 01226 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01227 /*@modifies db, rpmGlobalMacroContext, fileSystem, internalState @*/; 01228 01235 int rpmdbCountPackages(/*@null@*/ rpmdb db, const char * N) 01236 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01237 /*@modifies db, rpmGlobalMacroContext, fileSystem, internalState @*/; 01238 01244 uint32_t rpmmiInstance(/*@null@*/ rpmmi mi) 01245 /*@*/; 01246 01252 uint32_t rpmmiBNTag(/*@null@*/ rpmmi mi) 01253 /*@*/; 01254 01260 unsigned int rpmmiCount(/*@null@*/ rpmmi mi) 01261 /*@*/; 01262 01270 int rpmmiGrow(/*@null@*/ rpmmi mi, 01271 /*@null@*/ const uint32_t * hdrNums, int nHdrNums) 01272 /*@modifies mi @*/; 01273 01280 int rpmmiGrowBasename(rpmmi mi, const char * bn) 01281 /*@modifies mi @*/; 01282 01288 int rpmmiSort(/*@null@*/ rpmmi mi) 01289 /*@modifies mi @*/; 01290 01300 int rpmmiPrune(/*@null@*/ rpmmi mi, 01301 /*@null@*/ uint32_t * hdrNums, int nHdrNums, int sorted) 01302 /*@modifies mi, hdrNums @*/; 01303 01312 int rpmmiAddPattern(/*@null@*/ rpmmi mi, rpmTag tag, 01313 rpmMireMode mode, /*@null@*/ const char * pattern) 01314 /*@globals rpmGlobalMacroContext, h_errno, internalState @*/ 01315 /*@modifies mi, mode, rpmGlobalMacroContext, internalState @*/; 01316 01324 int rpmmiSetRewrite(/*@null@*/ rpmmi mi, int rewrite) 01325 /*@modifies mi @*/; 01326 01333 int rpmmiSetModified(/*@null@*/ rpmmi mi, int modified) 01334 /*@modifies mi @*/; 01335 01344 /*@only@*/ /*@null@*/ 01345 rpmmi rpmmiInit(/*@null@*/ rpmdb db, rpmTag tag, 01346 /*@null@*/ const void * keyp, size_t keylen) 01347 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01348 /*@modifies db, rpmGlobalMacroContext, fileSystem, internalState @*/; 01349 01355 /*@null@*/ 01356 Header rpmmiNext(/*@null@*/ rpmmi mi) 01357 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01358 /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/; 01359 01369 /*@mayexit@*/ 01370 int rpmdbCheckTerminate(int terminate) 01371 /*@globals fileSystem, internalState @*/ 01372 /*@modifies fileSystem, internalState @*/; 01373 01377 /*@mayexit@*/ 01378 int rpmdbCheckSignals(void) 01379 /*@globals fileSystem, internalState @*/ 01380 /*@modifies fileSystem, internalState @*/; 01381 01387 /*@null@*/ 01388 rpmmi rpmmiUnlink(/*@only@*/ /*@null@*/rpmmi mi) 01389 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01390 /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/; 01391 #define rpmmiUnlink(_mi) \ 01392 ((rpmmi)rpmioUnlinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__)) 01393 01399 /*@null@*/ 01400 rpmmi rpmmiLink(/*@only@*/ /*@null@*/rpmmi mi) 01401 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01402 /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/; 01403 #define rpmmiLink(_mi) \ 01404 ((rpmmi)rpmioLinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__)) 01405 01411 /*@null@*/ 01412 rpmmi rpmmiFree(/*@only@*/ /*@null@*/rpmmi mi) 01413 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01414 /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/; 01415 #define rpmmiFree(_mi) \ 01416 ((rpmmi)rpmioFreePoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__)) 01417 01427 int rpmdbMireApply(rpmdb db, rpmTag tag, rpmMireMode mode, const char * pat, 01428 const char *** argvp) 01429 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01430 /*@modifies db, *argvp, 01431 rpmGlobalMacroContext, fileSystem, internalState @*/; 01432 01441 int rpmdbAdd(/*@null@*/ rpmdb db, int iid, Header h, /*@null@*/ rpmts ts) 01442 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01443 /*@modifies db, h, ts, 01444 rpmGlobalMacroContext, fileSystem, internalState @*/; 01445 01454 int rpmdbRemove(/*@null@*/ rpmdb db, /*@unused@*/ int rid, uint32_t hdrNum, 01455 /*@null@*/ rpmts ts) 01456 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 01457 /*@modifies db, ts, 01458 rpmGlobalMacroContext, fileSystem, internalState @*/; 01459 01463 /*@unused@*/ 01464 int rpm_mergesort(void *base, size_t nmemb, size_t size, 01465 int (*cmp) (const void *, const void *)) 01466 /*@globals errno @*/ 01467 /*@modifies base, errno @*/; 01468 01469 #ifdef __cplusplus 01470 } 01471 #endif 01472 01473 /*@=bounds@*/ 01474 #endif /* H_RPMDB */
1.7.5.1