rpm 5.3.12
rpmdb/rpmdb.h
Go to the documentation of this file.
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 */