00001 #ifndef H_RPMDB
00002 #define H_RPMDB
00003
00009 #include <rpmlib.h>
00010
00013 typedef struct _dbiIndexItem * dbiIndexItem;
00014
00017 typedef struct _dbiIndex * dbiIndex;
00018
00019
00025 struct _dbiIndexItem {
00026 unsigned int hdrNum;
00027 unsigned int tagNum;
00028 unsigned int fpNum;
00029 unsigned int dbNum;
00030 };
00031
00035 struct _dbiIndexSet {
00036 struct _dbiIndexItem * recs;
00037 int count;
00038 };
00039
00040
00041 #if !defined(DB_VERSION_MAJOR)
00042 #define DB void
00043 #define DB_ENV void
00044 #define DBC void
00045 #define DBT void
00046 #define DB_LSN void
00047 #endif
00048
00052 struct _dbiVec {
00053 int dbv_major;
00054 int dbv_minor;
00055 int dbv_patch;
00063 int (*open) (rpmdb rpmdb, int rpmtag, dbiIndex * dbip)
00064
00065 ;
00066
00073 int (*close) ( dbiIndex dbi, unsigned int flags)
00074
00075 ;
00076
00083 int (*sync) (dbiIndex dbi, unsigned int flags)
00084
00085 ;
00086
00093 int (*copen) (dbiIndex dbi, DBC ** dbcp, unsigned int flags)
00094
00095 ;
00096
00103 int (*cclose) (dbiIndex dbi, DBC * dbcursor, unsigned int flags)
00104
00105 ;
00106
00116 int (*cdel) (dbiIndex dbi, DBC * dbcursor,
00117 const void * keyp, size_t keylen, unsigned int flags)
00118
00119 ;
00120
00132 int (*cget) (dbiIndex dbi, DBC * dbcursor,
00133 void ** keypp, size_t * keylenp,
00134 void ** datapp, size_t * datalenp,
00135 unsigned int flags)
00136
00137
00138 ;
00139
00151 int (*cput) (dbiIndex dbi, DBC * dbcursor,
00152 const void * keyp, size_t keylen,
00153 const void * datap, size_t datalen,
00154 unsigned int flags)
00155
00156 ;
00157
00166 int (*ccount) (dbiIndex dbi, DBC * dbcursor,
00167 unsigned int * countp,
00168 unsigned int flags)
00169
00170 ;
00171
00177 int (*byteswapped) (dbiIndex dbi)
00178
00179 ;
00180
00187 int (*stat) (dbiIndex dbi, unsigned int flags)
00188
00189 ;
00190
00191 };
00192
00196 struct _dbiIndex {
00197 const char * dbi_root;
00198 const char * dbi_home;
00199 const char * dbi_file;
00200 const char * dbi_subfile;
00201 const char * dbi_tmpdir;
00203 int dbi_ecflags;
00204 int dbi_cflags;
00205 int dbi_oeflags;
00206 int dbi_eflags;
00207 int dbi_oflags;
00208 int dbi_tflags;
00210 int dbi_type;
00211 unsigned dbi_mode;
00212 int dbi_perms;
00213 long dbi_shmkey;
00214 int dbi_api;
00216 int dbi_verify_on_close;
00217 int dbi_tear_down;
00218 int dbi_use_cursors;
00219 int dbi_use_dbenv;
00220 int dbi_permit_dups;
00221 int dbi_get_rmw_cursor;
00222 int dbi_no_fsync;
00223 int dbi_no_dbsync;
00224 int dbi_lockdbfd;
00225 int dbi_temporary;
00226 int dbi_debug;
00227 int dbi_byteswapped;
00228
00229 char * dbi_host;
00230 long dbi_cl_timeout;
00231 long dbi_sv_timeout;
00232
00233
00234 int dbi_lorder;
00235 void (*db_errcall) (const char *db_errpfx, char *buffer)
00236
00237 ;
00238 FILE * dbi_errfile;
00239 const char * dbi_errpfx;
00240 int dbi_verbose;
00241 int dbi_region_init;
00242 int dbi_tas_spins;
00243
00244 int dbi_mp_mmapsize;
00245 int dbi_mp_size;
00246
00247 unsigned int dbi_lk_max;
00248 unsigned int dbi_lk_detect;
00249 int dbi_lk_nmodes;
00250 unsigned char * dbi_lk_conflicts;
00251
00252 unsigned int dbi_lg_max;
00253 unsigned int dbi_lg_bsize;
00254
00255 unsigned int dbi_tx_max;
00256 #if 0
00257 int (*dbi_tx_recover) (DB_ENV *dbenv, DBT *log_rec,
00258 DB_LSN *lsnp, int redo, void *info)
00259
00260 ;
00261 #endif
00262
00263 int dbi_cachesize;
00264 int dbi_pagesize;
00265 void * (*dbi_malloc) (size_t nbytes)
00266 ;
00267
00268 unsigned int dbi_h_ffactor;
00269 unsigned int (*dbi_h_hash_fcn) (DB *, const void *bytes, unsigned int length) ;
00270 unsigned int dbi_h_nelem;
00271 unsigned int dbi_h_flags;
00272 int (*dbi_h_dup_compare_fcn) (DB *, const DBT *, const DBT *) ;
00273
00274 int dbi_bt_flags;
00275 int dbi_bt_minkey;
00276 int (*dbi_bt_compare_fcn) (DB *, const DBT *, const DBT *) ;
00277 int (*dbi_bt_dup_compare_fcn) (DB *, const DBT *, const DBT *) ;
00278 size_t (*dbi_bt_prefix_fcn) (DB *, const DBT *, const DBT *) ;
00279
00280 int dbi_re_flags;
00281 int dbi_re_delim;
00282 unsigned int dbi_re_len;
00283 int dbi_re_pad;
00284 const char * dbi_re_source;
00285
00286 unsigned int dbi_q_extentsize;
00287
00288 rpmdb dbi_rpmdb;
00289 rpmTag dbi_rpmtag;
00290 int dbi_jlen;
00292 unsigned int dbi_lastoffset;
00294 void * dbi_db;
00295 void * dbi_rmw;
00296 void * dbi_stats;
00298 const struct _dbiVec * dbi_vec;
00300 };
00301
00305 struct rpmdb_s {
00306 const char * db_root;
00307 const char * db_home;
00308 int db_flags;
00309 int db_mode;
00310 int db_perms;
00311 int db_api;
00312 const char * db_errpfx;
00313 int db_remove_env;
00314 int db_filter_dups;
00315 int db_chrootDone;
00316 void (*db_errcall) (const char *db_errpfx, char *buffer)
00317 ;
00318 FILE * db_errfile;
00319 void * (*db_malloc) (size_t nbytes)
00320 ;
00321 void * (*db_realloc) ( void * ptr,
00322 size_t nbytes)
00323 ;
00324 void (*db_free) ( void * ptr)
00325 ;
00326 int db_opens;
00327 void * db_dbenv;
00328 int db_ndbi;
00329 dbiIndex * _dbi;
00331 int nrefs;
00332 };
00333
00334
00335
00338 enum rpmdbFlags {
00339 RPMDB_FLAG_JUSTCHECK = (1 << 0),
00340 RPMDB_FLAG_MINIMAL = (1 << 1),
00341
00342 RPMDB_FLAG_CHROOT = (1 << 2)
00343
00344 };
00345
00346 #ifdef __cplusplus
00347 extern "C" {
00348 #endif
00349
00350
00355 dbiIndex db3New(rpmdb rpmdb, int rpmtag)
00356
00357 ;
00358
00364 dbiIndex db3Free( dbiIndex dbi)
00365 ;
00366
00373
00374 extern const char *const prDbiOpenFlags(int dbflags,
00375 int print_dbenv_flags)
00376 ;
00377
00378
00386 dbiIndex dbiOpen( rpmdb db, int rpmtag,
00387 unsigned int flags)
00388 ;
00389
00394 int dbiCopen(dbiIndex dbi, DBC ** dbcp, unsigned int flags)
00395
00396 ;
00397
00398 #define DBI_WRITECURSOR (1 << 0)
00399 #define DBI_ITERATOR (1 << 1)
00400
00405 int dbiCclose(dbiIndex dbi, DBC * dbcursor, unsigned int flags)
00406
00407 ;
00408
00417 int dbiDel(dbiIndex dbi, DBC * dbcursor, const void * keyp, size_t keylen,
00418 unsigned int flags)
00419
00420 ;
00421
00432 int dbiGet(dbiIndex dbi, DBC * dbcursor, void ** keypp,
00433 size_t * keylenp,
00434 void ** datapp,
00435 size_t * datalenp,
00436 unsigned int flags)
00437
00438
00439 ;
00440
00451 int dbiPut(dbiIndex dbi, DBC * dbcursor, const void * keyp, size_t keylen,
00452 const void * datap, size_t datalen, unsigned int flags)
00453
00454 ;
00455
00464
00465 int dbiCount(dbiIndex dbi, DBC * dbcursor, unsigned int * countp,
00466 unsigned int flags)
00467
00468 ;
00469
00476 int dbiVerify( dbiIndex dbi, unsigned int flags)
00477
00478 ;
00479
00486 int dbiClose( dbiIndex dbi, unsigned int flags)
00487
00488 ;
00489
00496 int dbiSync (dbiIndex dbi, unsigned int flags)
00497
00498 ;
00499
00505 int dbiByteSwapped(dbiIndex dbi)
00506 ;
00507
00513 char * db1basename(int rpmtag)
00514 ;
00515
00516
00519
00520 unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi)
00521 ;
00522
00528 dbiIndexSet dbiFreeIndexSet( dbiIndexSet set)
00529 ;
00530
00536 unsigned int dbiIndexSetCount(dbiIndexSet set)
00537 ;
00538
00545 unsigned int dbiIndexRecordOffset(dbiIndexSet set, int recno)
00546 ;
00547
00554 unsigned int dbiIndexRecordFileNumber(dbiIndexSet set, int recno)
00555 ;
00556
00557 #ifdef __cplusplus
00558 }
00559 #endif
00560
00561 #endif