From 8e8ac09e14dadb84c117f73df39ff46ae71c1e33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Sat, 13 Jul 2024 16:13:11 +0300 Subject: [PATCH] =?UTF-8?q?mdbx:=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20`mdbx=5Fenumerate?= =?UTF-8?q?=5Fsubdb()`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mdbx.h | 13 ++++++++++--- src/dbi.c | 8 +++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/mdbx.h b/mdbx.h index 5a956e64..6908f969 100644 --- a/mdbx.h +++ b/mdbx.h @@ -4583,17 +4583,24 @@ typedef int(MDBX_subdb_enum_func)(void *ctx, const MDBX_txn *txn, const struct MDBX_stat *stat, MDBX_dbi dbi) MDBX_CXX17_NOEXCEPT; -/** \brief Enumerate the entries in the reader lock table. +/** \brief Перечисляет пользовательские именнованные таблицы. + * + * Производит перечисление пользовательских именнованных таблиц, вызывая + * специфицируемую пользователем функцию-визитер для каждой именованной таблицы. + * Перечисление продолжается до исчерпания именованных таблиц, либо до возврата + * отличного от нуля результата из заданной пользователем функции, которое будет + * сразу возвращено в качестве результата. + * * \ingroup c_statinfo * \see MDBX_subdb_enum_func * * \param [in] txn Транзакция запущенная посредством * \ref mdbx_txn_begin(). - * \param [in] func Указатель на пользовательскую функцию-перечислитель + * \param [in] func Указатель на пользовательскую функцию * с сигнатурой \ref MDBX_subdb_enum_func, * которая будет вызвана для каждой таблицы. * \param [in] ctx Указатель на некоторый контект, который будет передан - * в функцию-перечислитель как есть. + * в функцию `func()` как есть. * * \returns Ненулевое значение кода ошибки, либо 0 при успешном выполнении. */ LIBMDBX_API int mdbx_enumerate_subdb(const MDBX_txn *txn, diff --git a/src/dbi.c b/src/dbi.c index 9a6d0169..ffd1ca6a 100644 --- a/src/dbi.c +++ b/src/dbi.c @@ -1026,9 +1026,11 @@ __cold int mdbx_enumerate_subdb(const MDBX_txn *txn, MDBX_subdb_enum_func *func, stat_get(tree, &stat, sizeof(stat)); rc = func(ctx, txn, &name, tree->flags, &stat, dbi); if (rc != MDBX_SUCCESS) - break; + goto bailout; } - txn->cursors[MAIN_DBI] = cx.outer.next; + rc = (rc == MDBX_NOTFOUND) ? MDBX_SUCCESS : rc; - return (rc == MDBX_NOTFOUND) ? MDBX_SUCCESS : rc; + bailout: + txn->cursors[MAIN_DBI] = cx.outer.next; + return rc; }