mirror of
https://github.com/isar/libmdbx.git
synced 2025-02-01 06:58:21 +08:00
mdbx-windows: refine debug-logging.
This commit is contained in:
parent
0f82db941b
commit
83f3d820f1
24
src/mdbx.c
24
src/mdbx.c
@ -1389,6 +1389,30 @@ void __cold mdbx_debug_log(int type, const char *function, int line,
|
|||||||
if (mdbx_debug_logger)
|
if (mdbx_debug_logger)
|
||||||
mdbx_debug_logger(type, function, line, fmt, args);
|
mdbx_debug_logger(type, function, line, fmt, args);
|
||||||
else {
|
else {
|
||||||
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
|
if (IsDebuggerPresent()) {
|
||||||
|
int prefix_len = 0;
|
||||||
|
char *prefix = nullptr;
|
||||||
|
if (function && line > 0)
|
||||||
|
prefix_len = mdbx_asprintf(&prefix, "%s:%d ", function, line);
|
||||||
|
else if (function)
|
||||||
|
prefix_len = mdbx_asprintf(&prefix, "%s: ", function);
|
||||||
|
else if (line > 0)
|
||||||
|
prefix_len = mdbx_asprintf(&prefix, "%d: ", line);
|
||||||
|
if (prefix_len > 0 && prefix) {
|
||||||
|
OutputDebugStringA(prefix);
|
||||||
|
free(prefix);
|
||||||
|
}
|
||||||
|
char *msg = nullptr;
|
||||||
|
int msg_len = mdbx_vasprintf(&msg, fmt, args);
|
||||||
|
if (msg_len > 0 && msg) {
|
||||||
|
OutputDebugStringA(msg);
|
||||||
|
free(msg);
|
||||||
|
}
|
||||||
|
va_end(args);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (function && line > 0)
|
if (function && line > 0)
|
||||||
fprintf(stderr, "%s:%d ", function, line);
|
fprintf(stderr, "%s:%d ", function, line);
|
||||||
else if (function)
|
else if (function)
|
||||||
|
23
src/osal.c
23
src/osal.c
@ -193,11 +193,9 @@ __cold void mdbx_panic(const char *fmt, ...) {
|
|||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef mdbx_asprintf
|
#ifndef mdbx_vasprintf
|
||||||
int mdbx_asprintf(char **strp, const char *fmt, ...) {
|
int mdbx_vasprintf(char **strp, const char *fmt, va_list ap) {
|
||||||
va_list ap, ones;
|
va_list ones;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
|
||||||
va_copy(ones, ap);
|
va_copy(ones, ap);
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
int needed = _vscprintf(fmt, ap);
|
int needed = _vscprintf(fmt, ap);
|
||||||
@ -207,7 +205,6 @@ int mdbx_asprintf(char **strp, const char *fmt, ...) {
|
|||||||
#else
|
#else
|
||||||
#error FIXME
|
#error FIXME
|
||||||
#endif
|
#endif
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
if (unlikely(needed < 0 || needed >= INT_MAX)) {
|
if (unlikely(needed < 0 || needed >= INT_MAX)) {
|
||||||
*strp = nullptr;
|
*strp = nullptr;
|
||||||
@ -218,7 +215,11 @@ int mdbx_asprintf(char **strp, const char *fmt, ...) {
|
|||||||
*strp = malloc(needed + 1);
|
*strp = malloc(needed + 1);
|
||||||
if (unlikely(*strp == nullptr)) {
|
if (unlikely(*strp == nullptr)) {
|
||||||
va_end(ones);
|
va_end(ones);
|
||||||
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
SetLastError(MDBX_ENOMEM);
|
SetLastError(MDBX_ENOMEM);
|
||||||
|
#else
|
||||||
|
errno = MDBX_ENOMEM;
|
||||||
|
#endif
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,6 +238,16 @@ int mdbx_asprintf(char **strp, const char *fmt, ...) {
|
|||||||
}
|
}
|
||||||
return actual;
|
return actual;
|
||||||
}
|
}
|
||||||
|
#endif /* mdbx_vasprintf */
|
||||||
|
|
||||||
|
#ifndef mdbx_asprintf
|
||||||
|
int mdbx_asprintf(char **strp, const char *fmt, ...) {
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, fmt);
|
||||||
|
int rc = mdbx_vasprintf(strp, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
#endif /* mdbx_asprintf */
|
#endif /* mdbx_asprintf */
|
||||||
|
|
||||||
#ifndef mdbx_memalign_alloc
|
#ifndef mdbx_memalign_alloc
|
||||||
|
@ -386,8 +386,10 @@ void mdbx_assert_fail(const MDBX_env *env, const char *msg, const char *func,
|
|||||||
|
|
||||||
#if __GLIBC_PREREQ(2, 1)
|
#if __GLIBC_PREREQ(2, 1)
|
||||||
#define mdbx_asprintf asprintf
|
#define mdbx_asprintf asprintf
|
||||||
|
#define mdbx_vasprintf vasprintf
|
||||||
#else
|
#else
|
||||||
int mdbx_asprintf(char **strp, const char *fmt, ...);
|
__printf_args(2, 3) int mdbx_asprintf(char **strp, const char *fmt, ...);
|
||||||
|
int mdbx_vasprintf(char **strp, const char *fmt, va_list ap);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
Loading…
x
Reference in New Issue
Block a user