diff --git a/mdbx.h b/mdbx.h index 44802f30..625cca46 100644 --- a/mdbx.h +++ b/mdbx.h @@ -1415,7 +1415,7 @@ LIBMDBX_API int mdbx_cursor_del(MDBX_cursor *cursor, unsigned flags); * possible errors are: * - MDBX_EINVAL - cursor is not initialized, or an invalid parameter * was specified. */ -LIBMDBX_API int mdbx_cursor_count(MDBX_cursor *cursor, uint64_t *countp); +LIBMDBX_API int mdbx_cursor_count(MDBX_cursor *cursor, size_t *countp); /* Compare two data items according to a particular database. * diff --git a/src/mdbx.c b/src/mdbx.c index 82d6a1ee..a2beaea2 100644 --- a/src/mdbx.c +++ b/src/mdbx.c @@ -6725,7 +6725,7 @@ int mdbx_cursor_renew(MDBX_txn *txn, MDBX_cursor *mc) { } /* Return the count of duplicate data items for the current key */ -int mdbx_cursor_count(MDBX_cursor *mc, uint64_t *countp) { +int mdbx_cursor_count(MDBX_cursor *mc, size_t *countp) { if (unlikely(mc == NULL || countp == NULL)) return MDBX_EINVAL; @@ -6755,7 +6755,9 @@ int mdbx_cursor_count(MDBX_cursor *mc, uint64_t *countp) { if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { mdbx_cassert(mc, mc->mc_xcursor && (mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)); - *countp = mc->mc_xcursor->mx_db.md_entries; + *countp = unlikely(mc->mc_xcursor->mx_db.md_entries > INT_MAX) + ? INT_MAX + : mc->mc_xcursor->mx_db.md_entries; } } return MDBX_SUCCESS;