mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-21 18:08:21 +08:00
mdbx: refine mdbx_strerror() and mdbx_strerror_r().
Change-Id: I47588cea9f281e71d0e6b81a86a50124e55bc3d4
This commit is contained in:
parent
51e7159f36
commit
10ab5dc032
54
src/mdbx.c
54
src/mdbx.c
@ -1333,11 +1333,9 @@ static const char *__mdbx_strerr(int errnum) {
|
|||||||
|
|
||||||
const char *__cold mdbx_strerror_r(int errnum, char *buf, size_t buflen) {
|
const char *__cold mdbx_strerror_r(int errnum, char *buf, size_t buflen) {
|
||||||
const char *msg = __mdbx_strerr(errnum);
|
const char *msg = __mdbx_strerr(errnum);
|
||||||
if (!msg) {
|
if (!msg && buflen > 0 && buflen < INT_MAX) {
|
||||||
if (!buflen || buflen > INT_MAX)
|
|
||||||
return NULL;
|
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
size_t size = FormatMessageA(
|
const size_t size = FormatMessageA(
|
||||||
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
|
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
|
||||||
errnum, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, (DWORD)buflen,
|
errnum, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, (DWORD)buflen,
|
||||||
NULL);
|
NULL);
|
||||||
@ -1347,44 +1345,40 @@ const char *__cold mdbx_strerror_r(int errnum, char *buf, size_t buflen) {
|
|||||||
msg = strerror_r(errnum, buf, buflen);
|
msg = strerror_r(errnum, buf, buflen);
|
||||||
#elif (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)
|
#elif (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)
|
||||||
/* XSI-compliant */
|
/* XSI-compliant */
|
||||||
int rc = strerror_r(errnum, buf, buflen);
|
if (strerror_r(errnum, buf, buflen) == 0)
|
||||||
if (rc) {
|
msg = buf;
|
||||||
rc = snprintf(buf, buflen, "error %d", errnum);
|
|
||||||
assert(rc > 0);
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
#else
|
#else
|
||||||
strncpy(buf, strerror(errnum), buflen);
|
msg = strerror(errnum);
|
||||||
buf[buflen - 1] = '\0';
|
if (msg) {
|
||||||
return buf;
|
strncpy(buf, msg, buflen);
|
||||||
|
msg = buf;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (!msg) {
|
||||||
|
(void)snprintf(buf, buflen, "error %d", errnum);
|
||||||
|
msg = buf;
|
||||||
|
}
|
||||||
|
buf[buflen - 1] = '\0';
|
||||||
}
|
}
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *__cold mdbx_strerror(int errnum) {
|
const char *__cold mdbx_strerror(int errnum) {
|
||||||
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
|
static char buf[1024];
|
||||||
|
return mdbx_strerror_r(errnu, buf, sizeof(buf));
|
||||||
|
#else
|
||||||
const char *msg = __mdbx_strerr(errnum);
|
const char *msg = __mdbx_strerr(errnum);
|
||||||
if (!msg) {
|
if (!msg) {
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
|
||||||
static char buffer[1024];
|
|
||||||
size_t size = FormatMessageA(
|
|
||||||
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
|
|
||||||
errnum, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer,
|
|
||||||
sizeof(buffer), NULL);
|
|
||||||
if (size)
|
|
||||||
msg = buffer;
|
|
||||||
#else
|
|
||||||
if (errnum < 0) {
|
|
||||||
static char buffer[32];
|
|
||||||
int rc = snprintf(buffer, sizeof(buffer) - 1, "unknown error %d", errnum);
|
|
||||||
assert(rc > 0);
|
|
||||||
(void)rc;
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
msg = strerror(errnum);
|
msg = strerror(errnum);
|
||||||
#endif
|
if (!msg) {
|
||||||
|
static char buf[32];
|
||||||
|
(void)snprintf(buf, sizeof(buf) - 1, "error %d", errnum);
|
||||||
|
msg = buf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return msg;
|
return msg;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static txnid_t mdbx_oomkick(MDBX_env *env, const txnid_t laggard);
|
static txnid_t mdbx_oomkick(MDBX_env *env, const txnid_t laggard);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user