rpm 5.2.1

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 <rpmtypes.h>
00012 #include <mire.h>
00013 #if defined(_RPMDB_INTERNAL)
00014 #if defined(WITH_DB)
00015 #include "db.h"
00016 #else
00017 #include "db_emu.h"
00018 #endif
00019 #endif
00020 
00021 #if defined(_RPMDB_INTERNAL)
00022 #define DBT_INIT /*@-fullinitblock@*/ {0} /*@-fullinitblock@*/  /* -Wno-missing-field-initializers */
00023 #endif
00024 
00025 /*@-exportlocal@*/
00026 /*@unchecked@*/
00027 extern int _rpmdb_debug;
00028 /*@=exportlocal@*/
00029 
00030 #ifdef  NOTYET
00031 
00034 typedef /*@abstract@*/ /*@refcounted@*/ struct rpmdb_s * rpmdb;
00035 
00039 typedef /*@abstract@*/ struct rpmmi_s * rpmmi;
00040 #endif
00041 
00044 typedef /*@abstract@*/ struct _dbiIndexItem * dbiIndexItem;
00045 
00049 typedef /*@abstract@*/ struct _dbiIndexSet * dbiIndexSet;
00050 
00053 typedef /*@abstract@*/ struct _dbiIndex * dbiIndex;
00054 
00055 #if defined(_RPMDB_INTERNAL)
00056 #include <rpmio.h>
00057 #include <rpmsw.h>
00058 
00059 #if !defined(SWIG)      /* XXX inline dbiFoo() need */
00060 
00063 struct _dbiIndexItem {
00064     rpmuint32_t hdrNum;                 
00065     rpmuint32_t tagNum;                 
00066     rpmuint32_t fpNum;                  
00067 };
00068 
00072 struct _dbiIndexSet {
00073 /*@owned@*/ struct _dbiIndexItem * recs; 
00074     int count;                          
00075 };
00076 
00080 struct _dbiVec {
00081     int dbv_major;                      
00082     int dbv_minor;                      
00083     int dbv_patch;                      
00091     int (*open) (rpmdb rpmdb, rpmTag tag, /*@out@*/ dbiIndex * dbip)
00092         /*@globals fileSystem @*/
00093         /*@modifies *dbip, fileSystem @*/;
00094 
00101     int (*close) (/*@only@*/ dbiIndex dbi, unsigned int flags)
00102         /*@globals fileSystem @*/
00103         /*@modifies dbi, fileSystem @*/;
00104 
00111     int (*sync) (dbiIndex dbi, unsigned int flags)
00112         /*@globals fileSystem @*/
00113         /*@modifies fileSystem @*/;
00114 
00123     int (*associate) (dbiIndex dbi, dbiIndex dbisecondary,
00124                 int (*callback) (DB *, const DBT *, const DBT *, DBT *),
00125                 unsigned int flags)
00126         /*@globals fileSystem @*/
00127         /*@modifies dbi, fileSystem @*/;
00128 
00137     int (*join) (dbiIndex dbi, DBC ** curslist, /*@out@*/ DBC ** dbcp,
00138                 unsigned int flags)
00139         /*@globals fileSystem @*/
00140         /*@modifies dbi, *dbcp, fileSystem @*/;
00141 
00150     int (*copen) (dbiIndex dbi, /*@null@*/ DB_TXN * txnid,
00151                         /*@out@*/ DBC ** dbcp, unsigned int dbiflags)
00152         /*@globals fileSystem @*/
00153         /*@modifies dbi, *txnid, *dbcp, fileSystem @*/;
00154 
00162     int (*cclose) (dbiIndex dbi, /*@only@*/ DBC * dbcursor, unsigned int flags)
00163         /*@globals fileSystem @*/
00164         /*@modifies dbi, *dbcursor, fileSystem @*/;
00165 
00174     int (*cdup) (dbiIndex dbi, DBC * dbcursor, /*@out@*/ DBC ** dbcp,
00175                 unsigned int flags)
00176         /*@globals fileSystem @*/
00177         /*@modifies dbi, *dbcp, fileSystem @*/;
00178 
00188     int (*cdel) (dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data,
00189                         unsigned int flags)
00190         /*@globals fileSystem @*/
00191         /*@modifies *dbcursor, fileSystem @*/;
00192 
00202     int (*cget) (dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data,
00203                         unsigned int flags)
00204         /*@globals fileSystem @*/
00205         /*@modifies *dbcursor, *key, *data, fileSystem @*/;
00206 
00217     int (*cpget) (dbiIndex dbi, /*@null@*/ DBC * dbcursor,
00218                 DBT * key, DBT * pkey, DBT * data, unsigned int flags)
00219         /*@globals fileSystem @*/
00220         /*@modifies *dbcursor, *key, *pkey, *data, fileSystem @*/;
00221 
00231     int (*cput) (dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data,
00232                         unsigned int flags)
00233         /*@globals fileSystem @*/
00234         /*@modifies *dbcursor, fileSystem @*/;
00235 
00244     int (*ccount) (dbiIndex dbi, DBC * dbcursor,
00245                         /*@out@*/ unsigned int * countp,
00246                         unsigned int flags)
00247         /*@globals fileSystem @*/
00248         /*@modifies *dbcursor, fileSystem @*/;
00249 
00255     int (*byteswapped) (dbiIndex dbi)
00256         /*@globals fileSystem @*/
00257         /*@modifies fileSystem @*/;
00258 
00265     int (*stat) (dbiIndex dbi, unsigned int flags)
00266         /*@globals fileSystem @*/
00267         /*@modifies dbi, fileSystem @*/;
00268 };
00269 
00273 struct _dbiIndex {
00274 /*@relnull@*/
00275     const char * dbi_root;      
00276 /*@null@*/
00277     const char * dbi_home;      
00278 /*@relnull@*/
00279     const char * dbi_file;      
00280 /*@relnull@*/
00281     const char * dbi_subfile;
00282 /*@null@*/
00283     const char * dbi_tmpdir;    
00285     int dbi_ecflags;            
00286     int dbi_cflags;             
00287     int dbi_oeflags;            
00288     int dbi_eflags;             
00289     int dbi_oflags;             
00290     int dbi_tflags;             
00292     int dbi_type;               
00293     unsigned dbi_mode;          
00294     int dbi_perms;              
00295     long dbi_shmkey;            
00296     int dbi_api;                
00298     int dbi_verify_on_close;
00299     int dbi_use_dbenv;          
00300     int dbi_permit_dups;        
00301     int dbi_no_fsync;           
00302     int dbi_no_dbsync;          
00303     int dbi_lockdbfd;           
00304     int dbi_temporary;          
00305     int dbi_noload;             
00306     int dbi_debug;
00307     int dbi_byteswapped;
00308 
00309 /*@null@*/
00310     char * dbi_host;
00311     unsigned long dbi_cl_timeout;
00312     unsigned long dbi_sv_timeout;
00313 
00314         /* dbenv parameters */
00315     int dbi_lorder;
00316 /*@unused@*/
00317     /* XXX db-4.3.14 adds dbenv as 1st arg. */
00318     void (*db_errcall) (void * dbenv, const char *db_errpfx, char *buffer)
00319         /*@globals fileSystem @*/
00320         /*@modifies fileSystem @*/;
00321 /*@unused@*/ /*@shared@*/
00322     FILE *      dbi_errfile;
00323     const char * dbi_errpfx;
00324     int dbi_verbose;
00325     int dbi_region_init;
00326     unsigned int dbi_thread_count;
00327         /* locking sub-system parameters */
00328     unsigned int dbi_lk_max_lockers;
00329     unsigned int dbi_lk_max_locks;
00330     unsigned int dbi_lk_max_objects;
00331     unsigned int dbi_lk_detect;
00332 /*@unused@*/
00333     int dbi_lk_nmodes;
00334 /*@unused@*/
00335     unsigned char * dbi_lk_conflicts;
00336         /* logging sub-system parameters */
00337     unsigned int dbi_lg_bsize;
00338 /*@unused@*/
00339     const char * dbi_lg_dir;
00340 /*@unused@*/
00341     unsigned int dbi_lg_filemode;
00342     unsigned int dbi_lg_max;
00343     unsigned int dbi_lg_regionmax;
00344         /* mpool sub-system parameters */
00345     int dbi_mmapsize;           
00346     int dbi_cachesize;          
00347         /* mutex sub-system parameters */
00348     unsigned int dbi_mutex_align;
00349     unsigned int dbi_mutex_increment;
00350     unsigned int dbi_mutex_max;
00351     unsigned int dbi_mutex_tas_spins;
00352         /* replication sub-system parameters */
00353         /* sequences sub-system parameters */
00354     unsigned int dbi_seq_cachesize;
00355     unsigned int dbi_seq_flags;
00356 #if 0   /* needs signed 64 bit type */
00357     int64_t dbi_seq_min;
00358     int64_t dbi_seq_max;
00359 #endif
00360         /* transaction sub-system parameters */
00361     unsigned int dbi_tx_max;
00362 #if 0
00363     int (*dbi_tx_recover) (DB_ENV *dbenv, DBT *log_rec,
00364                                 DB_LSN *lsnp, int redo, void *info)
00365         /*@globals fileSystem @*/
00366         /*@modifies fileSystem @*/;
00367 #endif
00368         /* dbinfo parameters */
00369     int dbi_pagesize;           
00370 /*@unused@*/ /*@null@*/
00371     void * (*dbi_malloc) (size_t nbytes)
00372         /*@*/;
00373         /* hash access parameters */
00374     unsigned int dbi_h_ffactor; 
00375     unsigned int (*dbi_h_hash_fcn) (DB *, const void *bytes,
00376                                 unsigned int length)
00377         /*@*/;
00378     unsigned int dbi_h_nelem;   
00379     unsigned int dbi_h_flags;   
00380     int (*dbi_h_dup_compare_fcn) (DB *, const DBT *, const DBT *)
00381         /*@*/;
00382         /* btree access parameters */
00383     int dbi_bt_flags;
00384     int dbi_bt_minkey;
00385     int (*dbi_bt_compare_fcn) (DB *, const DBT *, const DBT *)
00386         /*@*/;
00387     int (*dbi_bt_dup_compare_fcn) (DB *, const DBT *, const DBT *)
00388         /*@*/;
00389     size_t (*dbi_bt_prefix_fcn) (DB *, const DBT *, const DBT *)
00390         /*@*/;
00391         /* recno access parameters */
00392     int dbi_re_flags;
00393     int dbi_re_delim;
00394     unsigned int dbi_re_len;
00395     int dbi_re_pad;
00396     const char * dbi_re_source;
00397         /* queue access parameters */
00398     unsigned int dbi_q_extentsize;
00399 
00400 /*@refcounted@*/
00401     rpmdb dbi_rpmdb;            
00402     rpmTag dbi_rpmtag;          
00403     size_t dbi_jlen;            
00405 /*@only@*//*@relnull@*/
00406     DB * dbi_db;                
00407 /*@only@*//*@null@*/
00408     DB_TXN * dbi_txnid;         
00409 /*@only@*//*@null@*/
00410     void * dbi_stats;           
00412 /*@observer@*/
00413     const struct _dbiVec * dbi_vec;     
00415 };
00416 #endif  /* !defined(SWIG) */
00417 
00421 struct rpmdb_s {
00422     struct rpmioItem_s _item;   
00423 /*@owned@*/ /*@relnull@*/
00424     const char * db_root;       
00425 /*@owned@*/
00426     const char * db_home;       
00427     int         db_flags;
00428     int         db_mode;        
00429     int         db_perms;       
00430     int         db_api;         
00431 /*@owned@*/
00432     const char * db_errpfx;     
00434     int         db_remove_env;  
00435     int         db_filter_dups; 
00436     int         db_verifying;
00437 
00438     int         db_chrootDone;  
00439     void (*db_errcall) (const char * db_errpfx, char * buffer)
00440         /*@*/;
00441 /*@shared@*/
00442     FILE *      db_errfile;     
00443 /*@only@*/
00444     void * (*db_malloc) (size_t nbytes)
00445         /*@*/;
00446 /*@only@*/
00447     void * (*db_realloc) (/*@only@*//*@null@*/ void * ptr, size_t nbytes)
00448         /*@*/;
00449     void (*db_free) (/*@only@*/ void * ptr)
00450         /*@modifies *ptr @*/;
00451 
00452     int (*db_export) (rpmdb db, Header h, int adding);
00453 
00454 /*@only@*/ /*@null@*/
00455     unsigned char * db_bits;    
00456     int         db_nbits;       
00457     rpmdb       db_next;        
00458     int         db_opens;       
00459 /*@only@*/ /*@null@*/
00460     void *      db_dbenv;       
00461     tagStore_t  db_tags;        
00462     size_t      db_ndbi;        
00463 /*@only@*/ /*@null@*/
00464     dbiIndex * _dbi;            
00466     struct rpmop_s db_getops;   
00467     struct rpmop_s db_putops;   
00468     struct rpmop_s db_delops;   
00470 #if defined(__LCLINT__)
00471 /*@refs@*/
00472     int nrefs;                  
00473 #endif
00474 };
00475 #endif  /* defined(_RPMDB_INTERNAL) */
00476 
00477 /* for RPM's internal use only */
00478 
00481 enum rpmdbFlags {
00482         RPMDB_FLAG_JUSTCHECK    = (1 << 0),
00483         RPMDB_FLAG_MINIMAL      = (1 << 1),
00484 /*@-enummemuse@*/
00485         RPMDB_FLAG_CHROOT       = (1 << 2)
00486 /*@=enummemuse@*/
00487 };
00488 
00489 #ifdef __cplusplus
00490 extern "C" {
00491 #endif
00492 
00493 #if defined(_RPMDB_INTERNAL)
00494 /*@-exportlocal@*/
00495 #if defined(WITH_DB) || defined(WITH_SQLITE)
00496 
00502 /*@unused@*/ /*@only@*/ /*@null@*/
00503 dbiIndex db3New(rpmdb rpmdb, rpmTag tag)
00504         /*@globals rpmGlobalMacroContext, h_errno, internalState @*/
00505         /*@modifies rpmGlobalMacroContext, internalState @*/;
00506 
00512 /*@null@*/
00513 dbiIndex db3Free( /*@only@*/ /*@null@*/ dbiIndex dbi)
00514         /*@*/;
00515 
00522 /*@-redecl@*/
00523 /*@exposed@*/
00524 extern const char * prDbiOpenFlags(int dbflags, int print_dbenv_flags)
00525         /*@*/;
00526 /*@=redecl@*/
00527 #endif
00528 
00536 /*@only@*/ /*@null@*/ dbiIndex dbiOpen(/*@null@*/ rpmdb db, rpmTag tag,
00537                 unsigned int flags)
00538         /*@globals rpmGlobalMacroContext, errno, h_errno, internalState @*/
00539         /*@modifies db, rpmGlobalMacroContext, errno, internalState @*/;
00540 
00547 void * dbiStatsAccumulator(dbiIndex dbi, int opx)
00548         /*@*/;
00549 
00550 #if !defined(SWIG)
00551 /*@-globuse -mustmod @*/ /* FIX: vector annotations */
00560 /*@unused@*/ static inline
00561 int dbiCopen(dbiIndex dbi, /*@null@*/ DB_TXN * txnid,
00562                 /*@out@*/ DBC ** dbcp, unsigned int flags)
00563         /*@globals fileSystem @*/
00564         /*@modifies dbi, *dbcp, fileSystem @*/
00565 {
00566     return (*dbi->dbi_vec->copen) (dbi, txnid, dbcp, flags);
00567 }
00568 
00576 /*@unused@*/ static inline
00577 int dbiCclose(dbiIndex dbi, /*@only@*/ DBC * dbcursor, unsigned int flags)
00578         /*@globals fileSystem @*/
00579         /*@modifies dbi, *dbcursor, fileSystem @*/
00580 {
00581     return (*dbi->dbi_vec->cclose) (dbi, dbcursor, flags);
00582 }
00583 
00592 /*@unused@*/ static inline
00593 int dbiCdup(dbiIndex dbi, DBC * dbcursor, /*@out@*/ DBC ** dbcp,
00594                 unsigned int flags)
00595         /*@modifies dbi, *dbcp @*/
00596 {
00597     return (*dbi->dbi_vec->cdup) (dbi, dbcursor, dbcp, flags);
00598 }
00599 
00609 /*@unused@*/ static inline
00610 int dbiDel(dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data,
00611                 unsigned int flags)
00612         /*@globals fileSystem, internalState @*/
00613         /*@modifies dbi, *dbcursor, fileSystem, internalState @*/
00614 {
00615     rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 16);     /* RPMTS_OP_DBDEL */
00616     int rc;
00617     assert(key->data != NULL && key->size > 0);
00618     (void) rpmswEnter(sw, 0);
00619     rc = (dbi->dbi_vec->cdel) (dbi, dbcursor, key, data, flags);
00620     (void) rpmswExit(sw, data->size);
00621     return rc;
00622 }
00623 
00633 /*@unused@*/ static inline
00634 int dbiGet(dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data,
00635                 unsigned int flags)
00636         /*@globals fileSystem, internalState @*/
00637         /*@modifies dbi, *dbcursor, *key, *data, fileSystem, internalState @*/
00638 {
00639     rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 14);     /* RPMTS_OP_DBGET */
00640     int rc;
00641     assert((flags == DB_NEXT) || (key->data != NULL && key->size > 0));
00642     (void) rpmswEnter(sw, 0);
00643     rc = (dbi->dbi_vec->cget) (dbi, dbcursor, key, data, flags);
00644     (void) rpmswExit(sw, data->size);
00645     return rc;
00646 }
00647 
00658 /*@unused@*/ static inline
00659 int dbiPget(dbiIndex dbi, /*@null@*/ DBC * dbcursor,
00660                 DBT * key, DBT * pkey, DBT * data, unsigned int flags)
00661         /*@globals fileSystem, internalState @*/
00662         /*@modifies dbi, *dbcursor, *key, *pkey, *data, fileSystem, internalState @*/
00663 {
00664     rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 14);     /* RPMTS_OP_DBGET */
00665     int rc;
00666     assert((flags == DB_NEXT) || (key->data != NULL && key->size > 0));
00667     (void) rpmswEnter(sw, 0);
00668     rc = (dbi->dbi_vec->cpget) (dbi, dbcursor, key, pkey, data, flags);
00669     (void) rpmswExit(sw, data->size);
00670     return rc;
00671 }
00672 
00682 /*@unused@*/ static inline
00683 int dbiPut(dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key, DBT * data,
00684                 unsigned int flags)
00685         /*@globals fileSystem, internalState @*/
00686         /*@modifies dbi, *dbcursor, *key, fileSystem, internalState @*/
00687 {
00688     rpmop sw = (rpmop)dbiStatsAccumulator(dbi, 15);     /* RPMTS_OP_DBPUT */
00689     int rc;
00690     assert(key->data != NULL && key->size > 0 && data->data != NULL && data->size > 0);
00691     (void) rpmswEnter(sw, 0);
00692     rc = (dbi->dbi_vec->cput) (dbi, dbcursor, key, data, flags);
00693     (void) rpmswExit(sw, data->size);
00694     return rc;
00695 }
00696 
00705 /*@unused@*/ static inline
00706 int dbiCount(dbiIndex dbi, DBC * dbcursor, /*@out@*/ unsigned int * countp,
00707                 unsigned int flags)
00708         /*@globals fileSystem @*/
00709         /*@modifies *dbcursor, fileSystem @*/
00710 {
00711     return (*dbi->dbi_vec->ccount) (dbi, dbcursor, countp, flags);
00712 }
00713 
00720 /*@unused@*/ static inline
00721 int dbiVerify(/*@only@*/ dbiIndex dbi, unsigned int flags)
00722         /*@globals fileSystem @*/
00723         /*@modifies dbi, fileSystem @*/
00724 {
00725     dbi->dbi_verify_on_close = 1;
00726     return (*dbi->dbi_vec->close) (dbi, flags);
00727 }
00728 
00735 /*@unused@*/ static inline
00736 int dbiClose(/*@only@*/ dbiIndex dbi, unsigned int flags)
00737         /*@globals fileSystem @*/
00738         /*@modifies dbi, fileSystem @*/
00739 {
00740     return (*dbi->dbi_vec->close) (dbi, flags);
00741 }
00742 
00749 /*@unused@*/ static inline
00750 int dbiSync (dbiIndex dbi, unsigned int flags)
00751         /*@globals fileSystem @*/
00752         /*@modifies fileSystem @*/
00753 {
00754     return (*dbi->dbi_vec->sync) (dbi, flags);
00755 }
00756 
00765 /*@unused@*/ static inline
00766 int dbiAssociate(dbiIndex dbi, dbiIndex dbisecondary,
00767                 int (*callback) (DB *, const DBT *, const DBT *, DBT *),
00768                 unsigned int flags)
00769         /*@globals fileSystem @*/
00770         /*@modifies dbi, fileSystem @*/
00771 {
00772     return (*dbi->dbi_vec->associate) (dbi, dbisecondary, callback, flags);
00773 }
00774 
00783 /*@unused@*/ static inline
00784 int dbiJoin(dbiIndex dbi, DBC ** curslist, /*@out@*/ DBC ** dbcp,
00785                 unsigned int flags)
00786         /*@globals fileSystem @*/
00787         /*@modifies dbi, *dbcp, fileSystem @*/
00788 {
00789     return (*dbi->dbi_vec->join) (dbi, curslist, dbcp, flags);
00790 }
00791 
00797 /*@unused@*/ static inline
00798 int dbiByteSwapped(dbiIndex dbi)
00799         /*@modifies dbi @*/
00800 {
00801     if (dbi->dbi_byteswapped == -1)
00802         dbi->dbi_byteswapped = (*dbi->dbi_vec->byteswapped) (dbi);
00803     return dbi->dbi_byteswapped;
00804 }
00805 
00812 /*@unused@*/ static inline
00813 int dbiStat(dbiIndex dbi, unsigned int flags)
00814         /*@modifies dbi @*/
00815 {
00816     return (*dbi->dbi_vec->stat) (dbi, flags);
00817 }
00818 
00824 /*@unused@*/ static inline /*@observer@*/ /*@null@*/
00825 DB_TXN * dbiTxnid(dbiIndex dbi)
00826         /*@*/
00827 {
00828     return dbi->dbi_txnid;
00829 }
00830 /*@=globuse =mustmod @*/
00831 #endif  /* !defined(SWIG) */
00832 
00833 /*@=exportlocal@*/
00834 
00840 /*@null@*/
00841 dbiIndexSet dbiFreeIndexSet(/*@only@*/ /*@null@*/ dbiIndexSet set)
00842         /*@modifies set @*/;
00843 
00849 unsigned int dbiIndexSetCount(dbiIndexSet set)
00850         /*@*/;
00851 
00858 unsigned int dbiIndexRecordOffset(dbiIndexSet set, int recno)
00859         /*@*/;
00860 
00867 unsigned int dbiIndexRecordFileNumber(dbiIndexSet set, int recno)
00868         /*@*/;
00869 #endif  /* defined(_RPMDB_INTERNAL) */
00870 
00877 /*@unused@*/ /*@null@*/
00878 rpmdb rpmdbUnlink (/*@killref@*/ /*@only@*/ rpmdb db, const char * msg)
00879         /*@modifies db @*/;
00880 #define rpmdbUnlink(_db, _msg)  \
00881         ((rpmdb)rpmioUnlinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__))
00882 
00889 /*@unused@*/ /*@newref@*/
00890 rpmdb rpmdbLink (rpmdb db, const char * msg)
00891         /*@modifies db @*/;
00892 #define rpmdbLink(_db, _msg)    \
00893         ((void *)rpmioLinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__))
00894 
00897 /*@only@*/ /*@null@*/
00898 rpmdb rpmdbNew(/*@kept@*/ /*@null@*/ const char * root,
00899                 /*@kept@*/ /*@null@*/ const char * home,
00900                 int mode, int perms, int flags)
00901         /*@globals fileSystem, internalState @*/
00902         /*@modifies fileSystem, internalState @*/;
00903 
00906 int rpmdbOpenDatabase(/*@null@*/ const char * prefix,
00907                 /*@null@*/ const char * dbpath,
00908                 int _dbapi, /*@null@*/ /*@out@*/ rpmdb *dbp,
00909                 int mode, int perms, int flags)
00910         /*@globals rpmGlobalMacroContext, h_errno,
00911                 fileSystem, internalState @*/
00912         /*@modifies *dbp, rpmGlobalMacroContext,
00913                 fileSystem, internalState @*/;
00914 
00923 int rpmdbOpen (/*@null@*/ const char * prefix, /*@null@*/ /*@out@*/ rpmdb * dbp,
00924                 int mode, int perms)
00925         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00926         /*@modifies *dbp, rpmGlobalMacroContext, fileSystem, internalState @*/;
00927 
00934 int rpmdbInit(/*@null@*/ const char * prefix, int perms)
00935         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00936         /*@modifies rpmGlobalMacroContext, fileSystem, internalState @*/;
00937 
00943 int rpmdbVerifyAllDBI(rpmdb db)
00944         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00945         /*@modifies db, rpmGlobalMacroContext, fileSystem, internalState @*/;
00946 
00952 int rpmdbVerify(/*@null@*/ const char * prefix)
00953         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00954         /*@modifies rpmGlobalMacroContext, fileSystem, internalState @*/;
00955 
00962 int rpmdbBlockDBI(/*@null@*/ rpmdb db, int tag)
00963         /*@modifies db @*/;
00964 
00971 int rpmdbCloseDBI(/*@null@*/ rpmdb db, int tag)
00972         /*@globals fileSystem @*/
00973         /*@modifies db, fileSystem @*/;
00974 
00980 int rpmdbClose (/*@killref@*/ /*@only@*/ /*@null@*/ rpmdb db)
00981         /*@globals fileSystem @*/
00982         /*@modifies db, fileSystem @*/;
00983 
00989 int rpmdbSync (/*@null@*/ rpmdb db)
00990         /*@globals fileSystem @*/
00991         /*@modifies fileSystem @*/;
00992 
00998 /*@-exportlocal@*/
00999 int rpmdbOpenAll (/*@null@*/ rpmdb db)
01000         /*@globals rpmGlobalMacroContext, h_errno, internalState @*/
01001         /*@modifies db, rpmGlobalMacroContext, internalState @*/;
01002 /*@=exportlocal@*/
01003 
01012 int rpmdbCount(/*@null@*/ rpmdb db, rpmTag tag,
01013                 const void * keyp, size_t keylen)
01014         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01015         /*@modifies db, rpmGlobalMacroContext, fileSystem, internalState @*/;
01016 
01023 int rpmdbCountPackages(/*@null@*/ rpmdb db, const char * name)
01024         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01025         /*@modifies db, rpmGlobalMacroContext, fileSystem, internalState @*/;
01026 
01032 unsigned int rpmmiInstance(/*@null@*/ rpmmi mi)
01033         /*@*/;
01034 
01039 unsigned int rpmmiFilenum(rpmmi mi)
01040         /*@*/;
01041 
01047 int rpmmiCount(/*@null@*/ rpmmi mi)
01048         /*@*/;
01049 
01057 int rpmmiGrow(/*@null@*/ rpmmi mi,
01058                 /*@null@*/ const int * hdrNums, int nHdrNums)
01059         /*@modifies mi @*/;
01060 
01070 int rpmmiPrune(/*@null@*/ rpmmi mi,
01071                 /*@null@*/ int * hdrNums, int nHdrNums, int sorted)
01072         /*@modifies mi, hdrNums @*/;
01073 
01082 int rpmmiAddPattern(/*@null@*/ rpmmi mi, rpmTag tag,
01083                 rpmMireMode mode, /*@null@*/ const char * pattern)
01084         /*@globals rpmGlobalMacroContext, h_errno, internalState @*/
01085         /*@modifies mi, mode, rpmGlobalMacroContext, internalState @*/;
01086 
01094 int rpmmiSetRewrite(/*@null@*/ rpmmi mi, int rewrite)
01095         /*@modifies mi @*/;
01096 
01103 int rpmmiSetModified(/*@null@*/ rpmmi mi, int modified)
01104         /*@modifies mi @*/;
01105 
01112 int rpmmiSetHdrChk(/*@null@*/ rpmmi mi, /*@null@*/ rpmts ts)
01113         /*@modifies mi @*/;
01114 
01123 /*@only@*/ /*@null@*/
01124 rpmmi rpmmiInit(/*@null@*/ rpmdb db, rpmTag tag,
01125                         /*@null@*/ const void * keyp, size_t keylen)
01126         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01127         /*@modifies db, rpmGlobalMacroContext, fileSystem, internalState @*/;
01128 
01134 /*@null@*/
01135 Header rpmmiNext(/*@null@*/ rpmmi mi)
01136         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01137         /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/;
01138 
01148 /*@mayexit@*/
01149 int rpmdbCheckTerminate(int terminate)
01150         /*@globals fileSystem, internalState @*/
01151         /*@modifies fileSystem, internalState @*/;
01152 
01156 /*@mayexit@*/
01157 int rpmdbCheckSignals(void)
01158         /*@globals fileSystem, internalState @*/
01159         /*@modifies fileSystem, internalState @*/;
01160 
01166 /*@null@*/
01167 rpmmi rpmmiUnlink(/*@only@*/ /*@null@*/rpmmi mi)
01168         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01169         /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/;
01170 #define rpmmiUnlink(_mi)  \
01171     ((rpmmi)rpmioUnlinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
01172 
01178 /*@null@*/
01179 rpmmi rpmmiLink(/*@only@*/ /*@null@*/rpmmi mi)
01180         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01181         /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/;
01182 #define rpmmiLink(_mi)  \
01183     ((rpmmi)rpmioLinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
01184 
01190 /*@null@*/
01191 rpmmi rpmmiFree(/*@only@*/ /*@null@*/rpmmi mi)
01192         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01193         /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/;
01194 #define rpmmiFree(_mi)  \
01195     ((rpmmi)rpmioFreePoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
01196 
01206 int rpmdbMireApply(rpmdb db, rpmTag tag, rpmMireMode mode, const char * pat,
01207                 const char *** argvp)
01208         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01209         /*@modifies db, *argvp,
01210                 rpmGlobalMacroContext, fileSystem, internalState @*/;
01211 
01220 int rpmdbAdd(/*@null@*/ rpmdb db, int iid, Header h, /*@null@*/ rpmts ts)
01221         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01222         /*@modifies db, h, ts,
01223                 rpmGlobalMacroContext, fileSystem, internalState @*/;
01224 
01233 int rpmdbRemove(/*@null@*/ rpmdb db, /*@unused@*/ int rid, unsigned int hdrNum,
01234                 /*@null@*/ rpmts ts)
01235         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01236         /*@modifies db, ts,
01237                 rpmGlobalMacroContext, fileSystem, internalState @*/;
01238 
01245 int rpmdbRebuild(/*@null@*/ const char * prefix, /*@null@*/ rpmts ts)
01246         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
01247         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
01248 
01252 /*@unused@*/
01253 int rpm_mergesort(void *base, size_t nmemb, size_t size,
01254                 int (*cmp) (const void *, const void *))
01255         /*@globals errno @*/
01256         /*@modifies base, errno @*/;
01257 
01258 #ifdef __cplusplus
01259 }
01260 #endif
01261 
01262 /*@=bounds@*/
01263 #endif  /* H_RPMDB */