]> git.sur5r.net Git - openldap/blobdiff - libraries/libmdb/mdb.c
Add MDB_{FIRST,LAST}_DUP for cursor_get
[openldap] / libraries / libmdb / mdb.c
index 431d1af5aeb41f6ca32fcdf507d1c668115a079c..4eff6ff8ed8fe658c7af030fec4352c172ddcca4 100644 (file)
@@ -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;