1 /* $NetBSD: vi_db.h,v 1.3 2013/11/29 22:56:19 christos 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 11 typedef void DB_ENV; 12 13 typedef 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 64 extern int (*nvi_db_create) __P((DB **, DB_ENV *, u_int32_t)); 65 extern int (*nvi_db_env_create) __P((DB_ENV **, u_int32_t)); 66 extern 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 */ 81 typedef DBT DBT_v1; 82 #undef DBT 83 #define DBT DBT_new 84 85 typedef 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 */ 96 struct __db_env_new; 97 typedef struct __db_env_new DB_ENV; 98 99 struct __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 112 struct __dbc_new; 113 typedef struct __dbc_new DBC; 114 115 typedef recno_t db_recno_t; 116 #define DB_MAX_RECORDS MAX_REC_NUMBER 117 118 #define DB_UNKNOWN (-1) 119 120 /* DB emulation */ 121 typedef DB DB_old; 122 #undef DB 123 #define DB DB_new 124 typedef struct __db_new DB; 125 126 #undef DB_TXN 127 typedef void DB_TXN; 128 129 #undef DB_LSN 130 typedef struct { 131 int dummy; 132 } DB_LSN; 133 134 struct __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 167 struct __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