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
00356 dbiIndex db3New(rpmdb rpmdb, int rpmtag)
00357
00358 ;
00359
00365 dbiIndex db3Free( dbiIndex dbi)
00366 ;
00367
00374
00375 extern const char *const prDbiOpenFlags(int dbflags,
00376 int print_dbenv_flags)
00377 ;
00378
00379
00387 dbiIndex dbiOpen( rpmdb db, int rpmtag,
00388 unsigned int flags)
00389 ;
00390
00396 int dbiCopen(dbiIndex dbi, DBC ** dbcp, unsigned int flags)
00397
00398 ;
00399
00400 #define DBI_WRITECURSOR (1 << 0)
00401 #define DBI_ITERATOR (1 << 1)
00402
00408 int dbiCclose(dbiIndex dbi, DBC * dbcursor, unsigned int flags)
00409
00410 ;
00411
00421 int dbiDel(dbiIndex dbi, DBC * dbcursor, const void * keyp, size_t keylen,
00422 unsigned int flags)
00423
00424 ;
00425
00437 int dbiGet(dbiIndex dbi, DBC * dbcursor, void ** keypp,
00438 size_t * keylenp,
00439 void ** datapp,
00440 size_t * datalenp,
00441 unsigned int flags)
00442
00443
00444 ;
00445
00457 int dbiPut(dbiIndex dbi, DBC * dbcursor, const void * keyp, size_t keylen,
00458 const void * datap, size_t datalen, unsigned int flags)
00459
00460 ;
00461
00470
00471 int dbiCount(dbiIndex dbi, DBC * dbcursor, unsigned int * countp,
00472 unsigned int flags)
00473
00474 ;
00475
00482 int dbiVerify( dbiIndex dbi, unsigned int flags)
00483
00484 ;
00485
00492 int dbiClose( dbiIndex dbi, unsigned int flags)
00493
00494 ;
00495
00502 int dbiSync (dbiIndex dbi, unsigned int flags)
00503
00504 ;
00505
00511 int dbiByteSwapped(dbiIndex dbi)
00512 ;
00513
00519 char * db1basename(int rpmtag)
00520 ;
00521
00522
00525
00526 unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi)
00527 ;
00528
00534 dbiIndexSet dbiFreeIndexSet( dbiIndexSet set)
00535 ;
00536
00542 unsigned int dbiIndexSetCount(dbiIndexSet set)
00543 ;
00544
00551 unsigned int dbiIndexRecordOffset(dbiIndexSet set, int recno)
00552 ;
00553
00560 unsigned int dbiIndexRecordFileNumber(dbiIndexSet set, int recno)
00561 ;
00562
00566 int mergesort(void *base, size_t nmemb, size_t size,
00567 int (*cmp) (const void *, const void *));
00568
00569 #ifdef __cplusplus
00570 }
00571 #endif
00572
00573 #endif