diff --git a/mdb.c b/mdb.c index 2c1d4f6e..c7c5bc11 100644 --- a/mdb.c +++ b/mdb.c @@ -7914,16 +7914,13 @@ mdb_cursor_count(MDB_cursor *mc, size_t *countp) return MDB_NOTFOUND; } - if (mc->mc_xcursor == NULL || IS_LEAF2(mp)) { - *countp = 1; - } else { + *countp = 1; + if (mc->mc_xcursor != NULL) { MDB_node *leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); - if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) - *countp = 1; - else if (unlikely(!(mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED))) - return EINVAL; - else + if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { + mdb_cassert(mc, mc->mc_xcursor && (mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)); *countp = mc->mc_xcursor->mx_db.md_entries; + } } #else if (unlikely(mc->mc_xcursor == NULL)) diff --git a/mdbx.c b/mdbx.c index dd0bff5f..929154fe 100644 --- a/mdbx.c +++ b/mdbx.c @@ -547,21 +547,13 @@ mdbx_get_ex(MDB_txn *txn, MDB_dbi dbi, } if (values_count) { - if (mc.mc_xcursor == NULL) - *values_count = 1; - else { - MDB_page *mp = mc.mc_pg[mc.mc_top]; - if (IS_LEAF2(mp)) - *values_count = 1; - else { - MDB_node *leaf = NODEPTR(mp, mc.mc_ki[mc.mc_top]); - if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) - *values_count = 1; - else { - mdb_tassert(txn, mc.mc_xcursor == &mx); - mdb_tassert(txn, mx.mx_cursor.mc_flags & C_INITIALIZED); - *values_count = mx.mx_db.md_entries; - } + *values_count = 1; + if (mc.mc_xcursor != NULL) { + MDB_node *leaf = NODEPTR(mc.mc_pg[mc.mc_top], mc.mc_ki[mc.mc_top]); + if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { + mdb_tassert(txn, mc.mc_xcursor == &mx + && (mx.mx_cursor.mc_flags & C_INITIALIZED)); + *values_count = mx.mx_db.md_entries; } } }