X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibmdb%2Fmdb.c;h=6d90db24b5e60d6a6bc3fc1724feecc8657ca4d0;hb=2e776bd36eae2369325f32c58b6beaaa5a0aff24;hp=667d44c5f9484d0097e6cfb84be1108f58ed4e79;hpb=b834dc05b3d4f4a71fb5e415d7f6a39f6e1963fe;p=openldap diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index 667d44c5f9..6d90db24b5 100644 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@ -1659,7 +1659,7 @@ mdb_get(MDB_txn *txn, MDB_dbi dbi, assert(data); DPRINTF("===> get key [%.*s]", (int)key->mv_size, (char *)key->mv_data); - if (txn == NULL || dbi >= txn->mt_numdbs) + if (txn == NULL || !dbi || dbi >= txn->mt_numdbs) return EINVAL; if (key->mv_size == 0 || key->mv_size > MAXKEYSIZE) { @@ -2673,7 +2673,7 @@ mdb_del(MDB_txn *txn, MDB_dbi dbi, assert(key != NULL); - if (txn == NULL || dbi >= txn->mt_numdbs) + if (txn == NULL || !dbi || dbi >= txn->mt_numdbs) return EINVAL; if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) { @@ -3035,7 +3035,7 @@ mdb_put(MDB_txn *txn, MDB_dbi dbi, assert(key != NULL); assert(data != NULL); - if (txn == NULL || dbi >= txn->mt_numdbs) + if (txn == NULL || !dbi || dbi >= txn->mt_numdbs) return EINVAL; if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) { @@ -3171,3 +3171,30 @@ void mdb_close(MDB_txn *txn, MDB_dbi dbi) txn->mt_dbxs[dbi].md_name.mv_size = 0; free(ptr); } + +int mdb_set_compare(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp) +{ + if (txn == NULL || !dbi || dbi >= txn->mt_numdbs) + return EINVAL; + + txn->mt_dbxs[dbi].md_cmp = cmp; + return MDB_SUCCESS; +} + +int mdb_set_dupsort(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp) +{ + if (txn == NULL || !dbi || dbi >= txn->mt_numdbs) + return EINVAL; + + txn->mt_dbxs[dbi].md_dcmp = cmp; + return MDB_SUCCESS; +} + +int mdb_set_relfunc(MDB_txn *txn, MDB_dbi dbi, MDB_rel_func *rel) +{ + if (txn == NULL || !dbi || dbi >= txn->mt_numdbs) + return EINVAL; + + txn->mt_dbxs[dbi].md_rel = rel; + return MDB_SUCCESS; +}