1 /* $NetBSD: slmdb.h,v 1.2 2017/02/14 01:16:49 christos Exp $ */ 2 3 #ifndef _SLMDB_H_INCLUDED_ 4 #define _SLMDB_H_INCLUDED_ 5 6 /*++ 7 /* NAME 8 /* slmdb 3h 9 /* SUMMARY 10 /* LMDB API wrapper 11 /* SYNOPSIS 12 /* #include <slmdb.h> 13 /* DESCRIPTION 14 /* .nf 15 16 /* 17 * System library. 18 */ 19 #include <setjmp.h> 20 21 #ifdef PATH_LMDB_H 22 #include PATH_LMDB_H 23 #else 24 #include <lmdb.h> 25 #endif 26 27 /* 28 * Utility library. 29 */ 30 #include <check_arg.h> 31 32 /* 33 * External interface. 34 */ 35 #ifdef NO_SIGSETJMP 36 #define SLMDB_JMP_BUF jmp_buf 37 #else 38 #define SLMDB_JMP_BUF sigjmp_buf 39 #endif 40 41 /* 42 * All data structure members are private. 43 */ 44 typedef struct { 45 size_t curr_limit; /* database soft size limit */ 46 int size_incr; /* database expansion factor */ 47 size_t hard_limit; /* database hard size limit */ 48 int open_flags; /* open() flags */ 49 int lmdb_flags; /* LMDB-specific flags */ 50 int slmdb_flags; /* bulk-mode flag */ 51 MDB_env *env; /* database environment */ 52 MDB_dbi dbi; /* database instance */ 53 MDB_txn *txn; /* bulk transaction */ 54 int db_fd; /* database file handle */ 55 MDB_cursor *cursor; /* iterator */ 56 MDB_val saved_key; /* saved cursor key buffer */ 57 size_t saved_key_size; /* saved cursor key buffer size */ 58 void (*longjmp_fn) (void *, int);/* exception handling */ 59 void (*notify_fn) (void *, int,...); /* workaround notification */ 60 void (*assert_fn) (void *, const char *); /* assert notification */ 61 void *cb_context; /* call-back context */ 62 int api_retry_count; /* slmdb(3) API call retry count */ 63 int bulk_retry_count; /* bulk_mode retry count */ 64 int api_retry_limit; /* slmdb(3) API call retry limit */ 65 int bulk_retry_limit; /* bulk_mode retry limit */ 66 } SLMDB; 67 68 #define SLMDB_FLAG_BULK (1 << 0) 69 70 extern int slmdb_init(SLMDB *, size_t, int, size_t); 71 extern int slmdb_open(SLMDB *, const char *, int, int, int); 72 extern int slmdb_get(SLMDB *, MDB_val *, MDB_val *); 73 extern int slmdb_put(SLMDB *, MDB_val *, MDB_val *, int); 74 extern int slmdb_del(SLMDB *, MDB_val *); 75 extern int slmdb_cursor_get(SLMDB *, MDB_val *, MDB_val *, MDB_cursor_op); 76 extern int slmdb_control(SLMDB *, int,...); 77 extern int slmdb_close(SLMDB *); 78 79 #define slmdb_fd(slmdb) ((slmdb)->db_fd) 80 #define slmdb_curr_limit(slmdb) ((slmdb)->curr_limit) 81 82 /* Legacy API: type-unchecked arguments, internal use. */ 83 #define SLMDB_CTL_END 0 84 #define SLMDB_CTL_LONGJMP_FN 1 /* exception handling */ 85 #define SLMDB_CTL_NOTIFY_FN 2 /* debug logging function */ 86 #define SLMDB_CTL_CB_CONTEXT 3 /* call-back context */ 87 #define SLMDB_CTL_API_RETRY_LIMIT 5 /* per slmdb(3) API call */ 88 #define SLMDB_CTL_BULK_RETRY_LIMIT 6 /* per bulk update */ 89 #define SLMDB_CTL_ASSERT_FN 7 /* report assertion failure */ 90 91 /* Safer API: type-checked arguments, external use. */ 92 #define CA_SLMDB_CTL_END SLMDB_CTL_END 93 #define CA_SLMDB_CTL_LONGJMP_FN(v) SLMDB_CTL_LONGJMP_FN, CHECK_VAL(SLMDB_CTL, SLMDB_LONGJMP_FN, (v)) 94 #define CA_SLMDB_CTL_NOTIFY_FN(v) SLMDB_CTL_NOTIFY_FN, CHECK_VAL(SLMDB_CTL, SLMDB_NOTIFY_FN, (v)) 95 #define CA_SLMDB_CTL_CB_CONTEXT(v) SLMDB_CTL_CB_CONTEXT, CHECK_PTR(SLMDB_CTL, void, (v)) 96 #define CA_SLMDB_CTL_API_RETRY_LIMIT(v) SLMDB_CTL_API_RETRY_LIMIT, CHECK_VAL(SLMDB_CTL, int, (v)) 97 #define CA_SLMDB_CTL_BULK_RETRY_LIMIT(v) SLMDB_CTL_BULK_RETRY_LIMIT, CHECK_VAL(SLMDB_CTL, int, (v)) 98 #define CA_SLMDB_CTL_ASSERT_FN(v) SLMDB_CTL_ASSERT_FN, CHECK_VAL(SLMDB_CTL, SLMDB_ASSERT_FN, (v)) 99 100 typedef void (*SLMDB_NOTIFY_FN) (void *, int,...); 101 typedef void (*SLMDB_LONGJMP_FN) (void *, int); 102 typedef void (*SLMDB_ASSERT_FN) (void *, const char *); 103 104 CHECK_VAL_HELPER_DCL(SLMDB_CTL, int); 105 CHECK_VAL_HELPER_DCL(SLMDB_CTL, SLMDB_NOTIFY_FN); 106 CHECK_VAL_HELPER_DCL(SLMDB_CTL, SLMDB_LONGJMP_FN); 107 CHECK_VAL_HELPER_DCL(SLMDB_CTL, SLMDB_ASSERT_FN); 108 CHECK_PTR_HELPER_DCL(SLMDB_CTL, void); 109 110 /* LICENSE 111 /* .ad 112 /* .fi 113 /* The Secure Mailer license must be distributed with this software. 114 /* AUTHOR(S) 115 /* Howard Chu 116 /* Symas Corporation 117 /*--*/ 118 119 #endif 120