]> git.sur5r.net Git - openldap/commitdiff
Add mdb_strerror(), mdb_env_set_flags()
authorHoward Chu <hyc@symas.com>
Tue, 16 Aug 2011 23:47:15 +0000 (16:47 -0700)
committerHoward Chu <hyc@symas.com>
Thu, 1 Sep 2011 23:31:10 +0000 (16:31 -0700)
libraries/libmdb/mdb.c
libraries/libmdb/mdb.h

index b71f1fd0f4b862ad7891cb14d988770cfdeb2fa6..c13cb6c07ff82922dcc85ec5dfcff20f1057ccfa 100644 (file)
@@ -460,6 +460,27 @@ mdb_version(int *maj, int *min, int *pat)
        return MDB_VERSION_STRING;
 }
 
+static const char *errstr[] = {
+       "MDB_KEYEXIST: Key/data pair already exists",
+       "MDB_NOTFOUND: No matching key/data pair found",
+       "MDB_PAGE_NOTFOUND: Requested page not found",
+       "MDB_CORRUPTED: Located page was wrong type",
+       "MDB_PANIC: Update of meta page failed",
+       "MDB_VERSION_MISMATCH: Database environment version mismatch"
+};
+
+char *
+mdb_strerror(int err)
+{
+       if (!err)
+               return ("Successful return: 0");
+
+       if (err >= MDB_KEYEXIST && err <= MDB_VERSION_MISMATCH)
+               return (char *)errstr[err - MDB_KEYEXIST];
+
+       return strerror(err);
+}
+
 int
 mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b)
 {
@@ -3160,6 +3181,19 @@ mdb_put(MDB_txn *txn, MDB_dbi dbi,
        return mdb_put0(txn, dbi, key, data, flags);
 }
 
+int
+mdb_env_set_flags(MDB_env *env, unsigned int flag, int onoff)
+{
+#define        CHANGEABLE      (MDB_NOSYNC)
+       if ((flag & CHANGEABLE) != flag)
+               return EINVAL;
+       if (onoff)
+               env->me_flags |= flag;
+       else
+               env->me_flags &= ~flag;
+       return MDB_SUCCESS;
+}
+
 int
 mdb_env_get_flags(MDB_env *env, unsigned int *arg)
 {
index 30d4e927ea0760cc65858650596fefc25b758e6d..372dfc136437f533251624e8e23ac2fe11ec95b7 100644 (file)
@@ -114,11 +114,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);