]> git.sur5r.net Git - openldap/blobdiff - libraries/libmdb/mdb.h
First cut at DUPFIXED support
[openldap] / libraries / libmdb / mdb.h
index 39d9b6fb3aa60047a2015985b244d2732f327d5b..5e679c55cee8212526d88a8c359becbaae44a73e 100644 (file)
@@ -35,7 +35,7 @@
 #define MDB_VERSION_MAJOR      0
 #define MDB_VERSION_MINOR      8
 #define MDB_VERSION_PATCH      0
-#define MDB_VERINT(a,b,c)      ((a << 24) | (b << 16) | c)
+#define MDB_VERINT(a,b,c)      (((a) << 24) | ((b) << 16) | (c))
 #define MDB_VERSION_FULL       \
        MDB_VERINT(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH)
 #define MDB_VERSION_DATE       "August 11, 2011"
@@ -70,9 +70,11 @@ typedef enum MDB_cursor_op {         /* cursor operations */
        MDB_FIRST,
        MDB_GET_BOTH,                   /* position at key/data */
        MDB_GET_BOTH_RANGE,             /* position at key, nearest data */
+       MDB_GET_MULTIPLE,               /* only for MDB_DUPFIXED */
        MDB_LAST,
        MDB_NEXT,
        MDB_NEXT_DUP,
+       MDB_NEXT_MULTIPLE,              /* only for MDB_DUPFIXED */
        MDB_NEXT_NODUP,
        MDB_PREV,
        MDB_PREV_DUP,
@@ -84,17 +86,19 @@ typedef enum MDB_cursor_op {                /* cursor operations */
 /* return codes */
 /* BerkeleyDB uses -30800 to -30999, we'll go under them */
 #define MDB_SUCCESS     0
-#define MDB_KEYEXIST   -30799          /* key/data pair already exists */
-#define MDB_NOTFOUND   -30798          /* key/data pair not found (EOF) */
-#define MDB_PAGE_NOTFOUND      -30797  /* Requested page not found */
-#define MDB_CORRUPTED  -30796          /* Located page was wrong type */
-#define MDB_PANIC              -30795          /* Update of meta page failed, probably I/O error */
-#define MDB_VERSION_MISMATCH   -30794  /* Environment version mismatch */
+#define MDB_KEYEXIST   (-30799)                /* key/data pair already exists */
+#define MDB_NOTFOUND   (-30798)                /* key/data pair not found (EOF) */
+#define MDB_PAGE_NOTFOUND      (-30797)        /* Requested page not found */
+#define MDB_CORRUPTED  (-30796)                /* Located page was wrong type */
+#define MDB_PANIC              (-30795)                /* Update of meta page failed, probably I/O error */
+#define MDB_VERSION_MISMATCH   (-30794)        /* Environment version mismatch */
 
 /* DB flags */
 #define MDB_REVERSEKEY 0x02            /* use reverse string keys */
 #define MDB_DUPSORT            0x04            /* use sorted duplicates */
 #define MDB_INTEGERKEY 0x08            /* numeric keys in native byte order */
+#define MDB_DUPFIXED   0x10            /* sorted dup items have fixed size */
+#define MDB_INTEGERDUP 0x20            /* numeric dups in native byte order */
 
 /* environment flags */
 #define MDB_FIXEDMAP   0x01            /* mmap at a fixed address */
@@ -114,11 +118,13 @@ typedef struct MDB_stat {
 } MDB_stat;
 
 char *mdb_version(int *major, int *minor, int *patch);
+char *mdb_strerror(int err);
 int  mdb_env_create(MDB_env **env);
 int  mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mode_t mode);
 int  mdb_env_stat(MDB_env *env, MDB_stat *stat);
 int  mdb_env_sync(MDB_env *env, int force);
 void mdb_env_close(MDB_env *env);
+int  mdb_env_set_flags(MDB_env *env, unsigned int flags, int onoff);
 int  mdb_env_get_flags(MDB_env *env, unsigned int *flags);
 int  mdb_env_get_path(MDB_env *env, const char **path);
 int  mdb_env_set_mapsize(MDB_env *env, size_t size);