1/* $NetBSD: db.h,v 1.3 2008/08/05 15:49:18 aymeric Exp $ */ 2 3#include <db.h> 4 5#ifndef DB_BUFFER_SMALL 6#define DB_BUFFER_SMALL ENOMEM 7#endif 8 9#ifdef USE_BUNDLED_DB 10 11typedef void DB_ENV; 12 13typedef recno_t db_recno_t; 14#define DB_MAX_RECORDS MAX_REC_NUMBER 15 16#define db_env_close(env,flags) 17#define db_env_create(env,flags) \ 18 (((void)env), 1) 19#define db_env_remove(env,path,flags) \ 20 1 21#define db_open(db,file,type,flags,mode) \ 22 (db)->open(db, file, NULL, type, flags, mode) 23#define db_get_low(db,key,data,flags) \ 24 (db)->get(db, key, data, flags) 25#define db_close(db) \ 26 (db)->close(db) 27 28#else 29 30#if USE_DB1 || (DB_VERSION_MAJOR >= 3 && DB_VERSION_MINOR >= 1) 31#define db_env_open(env,path,flags,mode) \ 32 (env)->open(env, path, flags, mode) 33#define db_env_remove(env,path,flags) \ 34 (env)->remove(env, path, flags) 35#else 36#define db_env_open(env,path,flags,mode) \ 37 (env)->open(env, path, NULL, flags, mode) 38#define db_env_remove(env,path,flags) \ 39 (env)->remove(env, path, NULL, flags) 40#endif 41 42#define db_env_close(env,flags) \ 43 (env)->close(env, flags) 44 45#if DB_VERSION_MAJOR >= 4 && DB_VERSION_MINOR >= 1 46#define db_open(db,file,type,flags,mode) \ 47 (db)->open(db, NULL, file, NULL, type, flags, mode) 48#else 49#define db_open(db,file,type,flags,mode) \ 50 (db)->open(db, file, NULL, type, flags, mode) 51#endif 52#define db_get_low(db,key,data,flags) \ 53 (db)->get(db, NULL, key, data, flags) 54#define db_close(db) \ 55 (db)->close(db, DB_NOSYNC) 56 57#endif 58 59#ifdef USE_DYNAMIC_LOADING 60#define db_create nvi_db_create 61#define db_env_create nvi_db_env_create 62#define db_strerror nvi_db_strerror 63 64extern int (*nvi_db_create) __P((DB **, DB_ENV *, u_int32_t)); 65extern int (*nvi_db_env_create) __P((DB_ENV **, u_int32_t)); 66extern char *(*nvi_db_strerror) __P((int)); 67#endif 68 69#ifdef USE_DB1 70 71#define DB_AFTER 1 72#define DB_APPEND 2 73#define DB_BEFORE 3 74#define DB_FIRST 7 75#define DB_LAST 15 76#define DB_SET 25 77 78#define DB_NOTFOUND (-30989) 79 80/* DBT emulation */ 81typedef DBT DBT_v1; 82#undef DBT 83#define DBT DBT_new 84 85typedef struct { 86 void *data; 87 size_t size; 88 89 u_int32_t ulen; 90 91#define DB_DBT_USERMEM 0x040 92 u_int32_t flags; 93} DBT; 94 95/* DB_ENV emulation */ 96struct __db_env_new; 97typedef struct __db_env_new DB_ENV; 98 99struct __db_env_new { 100 int (*close)(DB_ENV *, u_int32_t); 101 int (*open)(DB_ENV *, char *, u_int32_t, int); 102#define DB_INIT_MPOOL 0x004000 103#define DB_PRIVATE 0x200000 104 int (*remove)(DB_ENV *, char *, u_int32_t); 105 106 char *base_path; 107 int mode; 108}; 109 110/* DBC emulation */ 111 112struct __dbc_new; 113typedef struct __dbc_new DBC; 114 115typedef recno_t db_recno_t; 116#define DB_MAX_RECORDS MAX_REC_NUMBER 117 118#define DB_UNKNOWN (-1) 119 120/* DB emulation */ 121typedef DB DB_old; 122#undef DB 123#define DB DB_new 124typedef struct __db_new DB; 125 126#undef DB_TXN 127typedef void DB_TXN; 128 129#undef DB_LSN 130typedef struct { 131 int dummy; 132} DB_LSN; 133 134struct __db_new { 135 DB_old *actual_db; 136 137 int type; 138 139 int (*close)(DB *, u_int32_t); 140#define DB_NOSYNC 26 /* close() */ 141 142 int (*open)(DB *, const char *, const char *, DBTYPE, u_int32_t, int); 143#define DB_CREATE 0x000001 /* Create file as necessary. */ 144#define DB_TRUNCATE 0x004000 /* Discard existing DB (O_TRUNC) */ 145 146 int (*sync)(DB *, u_int32_t); 147 int (*get)(DB *, DB_TXN *, DBT *, DBT *, u_int32_t); 148 int (*put)(DB *, DB_TXN *, DBT *, DBT *, u_int32_t); 149 int (*del)(DB *, DB_TXN *, DBT *, u_int32_t); 150 151 int (*cursor)(DB *, DB_TXN *, DBC **, u_int32_t); 152 153 int (*set_flags)(DB *, u_int32_t); 154#define DB_RENUMBER 0x0008 /* Recno: renumber on insert/delete. */ 155#define DB_SNAPSHOT 0x0020 /* Recno: snapshot the input. */ 156 157 int (*set_pagesize)(DB *, u_int32_t); 158 159 int (*set_re_delim)(DB *, int); 160 int (*set_re_source)(DB *, const char *); 161 162 RECNOINFO _recno_info; 163 u_int32_t _pagesize; 164 u_int32_t _flags; 165}; 166 167struct __dbc_new { 168 DB *db; 169 db_recno_t pos; 170 DBT_v1 pos_key; 171 int (*c_close)(DBC *); 172 int (*c_get)(DBC *, DBT *, DBT *, u_int32_t); 173 int (*c_put)(DBC *, DBT *, DBT *, u_int32_t); 174}; 175 176#endif /* USE_DB1 */ 177