diff --git a/mdbx.c b/mdbx.c index cf5187fe..d7001778 100644 --- a/mdbx.c +++ b/mdbx.c @@ -352,3 +352,14 @@ size_t mdbx_canary_get(MDB_txn *txn, mdbx_canary* canary) return txn->mt_txnid; } + +int mdbx_cursor_eof(MDB_cursor *mc) +{ + if (unlikely(mc == NULL)) + return EINVAL; + + if (unlikely(mc->mc_signature != MDBX_MC_SIGNATURE)) + return MDB_VERSION_MISMATCH; + + return (mc->mc_flags & (C_INITIALIZED | C_EOF)) != C_INITIALIZED ? 1 : 0; +} diff --git a/mdbx.h b/mdbx.h index d494ef36..8a5c238e 100644 --- a/mdbx.h +++ b/mdbx.h @@ -219,6 +219,10 @@ typedef struct mdbx_canary { int mdbx_canary_put(MDB_txn *txn, const mdbx_canary* canary); size_t mdbx_canary_get(MDB_txn *txn, mdbx_canary* canary); +/** Returns 1 when no more data available or cursor not positioned, + * 0 otherwise or less that zero in error case. */ +int mdbx_cursor_eof(MDB_cursor *mc); + /** @} */ #ifdef __cplusplus