mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-02 00:04:12 +08:00
mdbx: доработка mdbx_dump_val()
используемой для логирования и отладки.
- Обеспечении терминирующего нуля даже при нехватке буфера и опосредованных предупреждений Valgrind из-за чтения внутри strlen() неинициализированных данных при последующем логировании/печати. - Ускорение за счет отказа от использования snpruintf().
This commit is contained in:
parent
e21e91ad1f
commit
fd8a99acff
@ -46,6 +46,7 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
|
|||||||
т.е. проверку БД в кооперативном (не эксклюзивном) режиме чтения-записи
|
т.е. проверку БД в кооперативном (не эксклюзивном) режиме чтения-записи
|
||||||
в сборках с поддержкой Valgrind или включеным ASAN. Для более подробной
|
в сборках с поддержкой Valgrind или включеным ASAN. Для более подробной
|
||||||
информации см. [соответствующий коммит](https://gitflic.ru/project/erthink/libmdbx/commit/1aead6869a7eff1a85e400ab3eeecb4c8b904fe6).
|
информации см. [соответствующий коммит](https://gitflic.ru/project/erthink/libmdbx/commit/1aead6869a7eff1a85e400ab3eeecb4c8b904fe6).
|
||||||
|
- Доработка `mdbx_dump_val()` используемой для логирования и отладки.
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
19
src/core.c
19
src/core.c
@ -3634,18 +3634,15 @@ const char *mdbx_dump_val(const MDBX_val *key, char *const buf,
|
|||||||
char *const detent = buf + bufsize - 2;
|
char *const detent = buf + bufsize - 2;
|
||||||
char *ptr = buf;
|
char *ptr = buf;
|
||||||
*ptr++ = '<';
|
*ptr++ = '<';
|
||||||
for (size_t i = 0; i < key->iov_len; i++) {
|
for (size_t i = 0; i < key->iov_len && ptr < detent; i++) {
|
||||||
const ptrdiff_t left = detent - ptr;
|
const char hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7',
|
||||||
assert(left > 0);
|
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
|
||||||
int len = snprintf(ptr, left, "%02x", data[i]);
|
*ptr++ = hex[data[i] >> 4];
|
||||||
if (len < 0 || len >= left)
|
*ptr++ = hex[data[i] & 15];
|
||||||
break;
|
|
||||||
ptr += len;
|
|
||||||
}
|
|
||||||
if (ptr < detent) {
|
|
||||||
ptr[0] = '>';
|
|
||||||
ptr[1] = '\0';
|
|
||||||
}
|
}
|
||||||
|
if (ptr < detent)
|
||||||
|
*ptr++ = '>';
|
||||||
|
*ptr = '\0';
|
||||||
}
|
}
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user