mirror of
https://github.com/isar/libmdbx.git
synced 2025-03-03 16:58:14 +08:00
mdbx: доработка mdbx_cursor_scan()
.
- Упрощение и обеспечение возврата `MDBX_RESULT_FALSE`, как при отсутствии данных, так и при неуспешном поиске. - Инициализация внутренних переменных key и value для устойчивости в случае использования контекстно-некорректных операций позиционирования курсора.
This commit is contained in:
parent
1d0ee509c2
commit
c153a34382
@ -17721,18 +17721,15 @@ int mdbx_cursor_scan(MDBX_cursor *mc, MDBX_predicate_func *predicate,
|
||||
if (unlikely(turn_op > 30 || ((1 << turn_op) & valid_turn_mask) == 0))
|
||||
return MDBX_EINVAL;
|
||||
|
||||
MDBX_val key, data;
|
||||
MDBX_val key = {nullptr, 0}, data = {nullptr, 0};
|
||||
int rc = mdbx_cursor_get(mc, &key, &data, start_op);
|
||||
if (unlikely(rc != MDBX_SUCCESS))
|
||||
return rc;
|
||||
for (;;) {
|
||||
while (likely(rc == MDBX_SUCCESS)) {
|
||||
rc = predicate(context, &key, &data, arg);
|
||||
if (rc != MDBX_RESULT_FALSE)
|
||||
return rc;
|
||||
rc = cursor_get(mc, &key, &data, turn_op);
|
||||
if (rc != MDBX_SUCCESS)
|
||||
return (rc == MDBX_NOTFOUND) ? MDBX_RESULT_FALSE : rc;
|
||||
}
|
||||
return (rc == MDBX_NOTFOUND) ? MDBX_RESULT_FALSE : rc;
|
||||
}
|
||||
|
||||
int mdbx_cursor_scan_from(MDBX_cursor *mc, MDBX_predicate_func *predicate,
|
||||
|
Loading…
x
Reference in New Issue
Block a user