00001 #ifndef H_RPMDB
00002 #define H_RPMDB
00003
00009 #include <rpmlib.h>
00010
00011 #include "fprint.h"
00012
00015 typedef struct _dbiIndexItem * dbiIndexItem;
00016
00019 typedef struct _dbiIndex * dbiIndex;
00020
00021
00027 struct _dbiIndexItem {
00028 unsigned int hdrNum;
00029 unsigned int tagNum;
00030 unsigned int fpNum;
00031 unsigned int dbNum;
00032 };
00033
00034 #ifdef DYING
00035
00038 struct _dbiIR {
00039 unsigned int recOffset;
00040 unsigned int fileNumber;
00041 };
00042
00043 typedef struct _dbiIR * DBIR_t;
00044
00045 #endif
00046
00050 struct _dbiIndexSet {
00051 struct _dbiIndexItem * recs;
00052 int count;
00053 };
00054
00055
00056 #if !defined(DB_VERSION_MAJOR)
00057 #define DB void
00058 #define DB_ENV void
00059 #define DBC void
00060 #define DBT void
00061 #define DB_LSN void
00062 #endif
00063
00067 struct _dbiVec {
00068 int dbv_major;
00069 int dbv_minor;
00070 int dbv_patch;
00078 int (*open) (rpmdb rpmdb, int rpmtag, dbiIndex * dbip)
00079 ;
00080
00087 int (*close) ( dbiIndex dbi, unsigned int flags)
00088 ;
00089
00096 int (*sync) (dbiIndex dbi, unsigned int flags)
00097 ;
00098
00105 int (*copen) (dbiIndex dbi, DBC ** dbcp, unsigned int flags)
00106 ;
00107
00114 int (*cclose) (dbiIndex dbi, DBC * dbcursor, unsigned int flags)
00115 ;
00116
00126 int (*cdel) (dbiIndex dbi, DBC * dbcursor,
00127 const void * keyp, size_t keylen, unsigned int flags)
00128 ;
00129
00141 int (*cget) (dbiIndex dbi, DBC * dbcursor,
00142 void ** keypp, size_t * keylenp,
00143 void ** datapp, size_t * datalenp,
00144 unsigned int flags)
00145
00146 ;
00147
00159 int (*cput) (dbiIndex dbi, DBC * dbcursor,
00160 const void * keyp, size_t keylen,
00161 const void * datap, size_t datalen,
00162 unsigned int flags)
00163 ;
00164
00173 int (*ccount) (dbiIndex dbi, DBC * dbcursor,
00174 unsigned int * countp,
00175 unsigned int flags)
00176 ;
00177
00183 int (*byteswapped) (dbiIndex dbi)
00184 ;
00185
00192 int (*stat) (dbiIndex dbi, unsigned int flags)
00193 ;
00194
00195 };
00196
00200 struct _dbiIndex {
00201 const char * dbi_root;
00202 const char * dbi_home;
00203 const char * dbi_file;
00204 const char * dbi_subfile;
00205 const char * dbi_tmpdir;
00207 int dbi_ecflags;
00208 int dbi_cflags;
00209 int dbi_oeflags;
00210 int dbi_eflags;
00211 int dbi_oflags;
00212 int dbi_tflags;
00214 int dbi_type;
00215 unsigned dbi_mode;
00216 int dbi_perms;
00217 long dbi_shmkey;
00218 int dbi_api;
00220 int dbi_verify_on_close;
00221 int dbi_tear_down;
00222 int dbi_use_cursors;
00223 int dbi_use_dbenv;
00224 int dbi_permit_dups;
00225 int dbi_get_rmw_cursor;
00226 int dbi_no_fsync;
00227 int dbi_no_dbsync;
00228 int dbi_lockdbfd;
00229 int dbi_temporary;
00230 int dbi_debug;
00231
00232 char * dbi_host;
00233 long dbi_cl_timeout;
00234 long dbi_sv_timeout;
00235
00236
00237 int dbi_lorder;
00238 void (*db_errcall) (const char *db_errpfx, char *buffer)
00239 ;
00240 FILE * dbi_errfile;
00241 const char * dbi_errpfx;
00242 int dbi_verbose;
00243 int dbi_region_init;
00244 int dbi_tas_spins;
00245
00246 int dbi_mp_mmapsize;
00247 int dbi_mp_size;
00248
00249 unsigned int dbi_lk_max;
00250 unsigned int dbi_lk_detect;
00251 int dbi_lk_nmodes;
00252 unsigned char * dbi_lk_conflicts;
00253
00254 unsigned int dbi_lg_max;
00255 unsigned int dbi_lg_bsize;
00256
00257 unsigned int dbi_tx_max;
00258 #if 0
00259 int (*dbi_tx_recover) (DB_ENV *dbenv, DBT *log_rec,
00260 DB_LSN *lsnp, int redo, void *info)
00261 ;
00262 #endif
00263
00264 int dbi_cachesize;
00265 int dbi_pagesize;
00266 void * (*dbi_malloc) (size_t nbytes)
00267 ;
00268
00269 unsigned int dbi_h_ffactor;
00270 unsigned int (*dbi_h_hash_fcn) (DB *, const void *bytes, unsigned int length) ;
00271 unsigned int dbi_h_nelem;
00272 unsigned int dbi_h_flags;
00273 int (*dbi_h_dup_compare_fcn) (DB *, const DBT *, const DBT *) ;
00274
00275 int dbi_bt_flags;
00276 int dbi_bt_minkey;
00277 int (*dbi_bt_compare_fcn) (DB *, const DBT *, const DBT *) ;
00278 int (*dbi_bt_dup_compare_fcn) (DB *, const DBT *, const DBT *) ;
00279 size_t (*dbi_bt_prefix_fcn) (DB *, const DBT *, const DBT *) ;
00280
00281 int dbi_re_flags;
00282 int dbi_re_delim;
00283 unsigned int dbi_re_len;
00284 int dbi_re_pad;
00285 const char * dbi_re_source;
00286
00287 unsigned int dbi_q_extentsize;
00288
00289 rpmdb dbi_rpmdb;
00290 rpmTag dbi_rpmtag;
00291 int dbi_jlen;
00293 unsigned int dbi_lastoffset;
00295 void * dbi_db;
00296 void * dbi_dbenv;
00297 void * dbi_dbinfo;
00298 void * dbi_rmw;
00299 void * dbi_stats;
00301 const struct _dbiVec * dbi_vec;
00303 };
00304
00308 struct rpmdb_s {
00309 const char * db_root;
00310 const char * db_home;
00311 int db_flags;
00312 int db_mode;
00313 int db_perms;
00314 int db_api;
00315 const char * db_errpfx;
00316 int db_remove_env;
00317 int db_filter_dups;
00318 int db_chrootDone;
00319 void (*db_errcall) (const char *db_errpfx, char *buffer)
00320 ;
00321 FILE * db_errfile;
00322 void * (*db_malloc) (size_t nbytes)
00323 ;
00324 void * (*db_realloc) ( void * ptr,
00325 size_t nbytes)
00326 ;
00327 void (*db_free) ( void * ptr)
00328 ;
00329 int db_ndbi;
00330 dbiIndex * _dbi;
00331 };
00332
00333
00334
00337 enum rpmdbFlags {
00338 RPMDB_FLAG_JUSTCHECK = (1 << 0),
00339 RPMDB_FLAG_MINIMAL = (1 << 1),
00340
00341 RPMDB_FLAG_CHROOT = (1 << 2)
00342
00343 };
00344
00345 #ifdef __cplusplus
00346 extern "C" {
00347 #endif
00348
00349
00354 dbiIndex db3New( rpmdb rpmdb, int rpmtag)
00355 ;
00356
00362 dbiIndex db3Free( dbiIndex dbi)
00363 ;
00364
00371
00372 extern const char *const prDbiOpenFlags(int dbflags,
00373 int print_dbenv_flags)
00374 ;
00375
00376
00384 dbiIndex dbiOpen( rpmdb db, int rpmtag,
00385 unsigned int flags)
00386 ;
00387
00392 int dbiCopen(dbiIndex dbi, DBC ** dbcp, unsigned int dbiflags)
00393 ;
00394
00395 #define DBI_WRITECURSOR (1 << 0)
00396 #define DBI_ITERATOR (1 << 1)
00397
00402 int dbiCclose(dbiIndex dbi, DBC * dbcursor, unsigned int flags)
00403 ;
00404
00413 int dbiDel(dbiIndex dbi, DBC * dbcursor, const void * keyp, size_t keylen,
00414 unsigned int flags)
00415 ;
00416
00427 int dbiGet(dbiIndex dbi, DBC * dbcursor, void ** keypp,
00428 size_t * keylenp,
00429 void ** datapp,
00430 size_t * datalenp,
00431 unsigned int flags)
00432
00433 ;
00434
00445 int dbiPut(dbiIndex dbi, DBC * dbcursor, const void * keyp, size_t keylen,
00446 const void * datap, size_t datalen, unsigned int flags)
00447 ;
00448
00457
00458 int dbiCount(dbiIndex dbi, DBC * dbcursor, unsigned int * countp,
00459 unsigned int flags)
00460 ;
00461
00468 int dbiVerify( dbiIndex dbi, unsigned int flags)
00469 ;
00470
00477 int dbiClose( dbiIndex dbi, unsigned int flags)
00478 ;
00479
00486 int dbiSync (dbiIndex dbi, unsigned int flags)
00487 ;
00488
00494 int dbiByteSwapped(dbiIndex dbi)
00495 ;
00496
00502 char * db1basename(int rpmtag)
00503 ;
00504
00505
00508
00509 unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi)
00510 ;
00511
00515 int rpmdbFindFpList( rpmdb db, fingerPrint * fpList,
00516 dbiIndexSet * matchList, int numItems)
00517 ;
00518
00524 dbiIndexSet dbiFreeIndexSet( dbiIndexSet set)
00525 ;
00526
00532 unsigned int dbiIndexSetCount(dbiIndexSet set)
00533 ;
00534
00541 unsigned int dbiIndexRecordOffset(dbiIndexSet set, int recno)
00542 ;
00543
00550 unsigned int dbiIndexRecordFileNumber(dbiIndexSet set, int recno)
00551 ;
00552
00553 #ifdef __cplusplus
00554 }
00555 #endif
00556
00557 #endif