X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibmdb%2Fmdb.c;fp=libraries%2Flibmdb%2Fmdb.c;h=4eff6ff8ed8fe658c7af030fec4352c172ddcca4;hb=f6edbd7793e5c01cb9089365872d01c11206c2ae;hp=431d1af5aeb41f6ca32fcdf507d1c668115a079c;hpb=9d821c26c3023b1efe3270cf8a8ce5eca111189f;p=openldap diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index 431d1af5ae..4eff6ff8ed 100644 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@ -2781,9 +2781,29 @@ fetchm: case MDB_FIRST: rc = mdb_cursor_first(cursor, key, data); break; + case MDB_FIRST_DUP: + if (data == NULL || + !(cursor->mc_txn->mt_dbs[cursor->mc_dbi].md_flags & MDB_DUPSORT) || + !cursor->mc_initialized || + !cursor->mc_xcursor->mx_cursor.mc_initialized) { + rc = EINVAL; + break; + } + rc = mdb_cursor_first(&cursor->mc_xcursor->mx_cursor, data, NULL); + break; case MDB_LAST: rc = mdb_cursor_last(cursor, key, data); break; + case MDB_LAST_DUP: + if (data == NULL || + !(cursor->mc_txn->mt_dbs[cursor->mc_dbi].md_flags & MDB_DUPSORT) || + !cursor->mc_initialized || + !cursor->mc_xcursor->mx_cursor.mc_initialized) { + rc = EINVAL; + break; + } + rc = mdb_cursor_last(&cursor->mc_xcursor->mx_cursor, data, NULL); + break; default: DPRINTF("unhandled/unimplemented cursor operation %u", op); rc = EINVAL;