rpm  5.4.4
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 <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 */