Bitcoin Core
32.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
util
syserror.cpp
Go to the documentation of this file.
1
// Copyright (c) 2020-present The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#include <bitcoin-build-config.h>
// IWYU pragma: keep
6
7
#include <
util/syserror.h
>
8
9
#include <
tinyformat.h
>
10
11
#include <cstring>
12
#include <string>
13
14
#if defined(WIN32)
15
#include <windows.h>
16
#endif
17
18
std::string
SysErrorString
(
int
err)
19
{
20
char
buf[1024];
21
/* Too bad there are three incompatible implementations of the
22
* thread-safe strerror. */
23
const
char
*s =
nullptr
;
24
#ifdef WIN32
25
if
(strerror_s(buf,
sizeof
(buf), err) == 0) s = buf;
26
#else
27
#ifdef STRERROR_R_CHAR_P
/* GNU variant can return a pointer outside the passed buffer */
28
s = strerror_r(err, buf,
sizeof
(buf));
29
#else
/* POSIX variant always returns message in buffer */
30
if
(strerror_r(err, buf,
sizeof
(buf)) == 0) s = buf;
31
#endif
32
#endif
33
if
(s !=
nullptr
) {
34
return
strprintf
(
"%s (%d)"
, s, err);
35
}
else
{
36
return
strprintf
(
"Unknown error (%d)"
, err);
37
}
38
}
39
40
#if defined(WIN32)
41
std::string Win32ErrorString(
int
err)
42
{
43
char
buf[256];
44
buf[0] = 0;
45
if
(FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK,
46
nullptr
, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
47
buf, ARRAYSIZE(buf),
nullptr
)) {
48
return
strprintf
(
"%s (%d)"
, buf, err);
49
}
else
{
50
return
strprintf
(
"Unknown error (%d)"
, err);
51
}
52
}
53
#endif
SysErrorString
std::string SysErrorString(int err)
Return system error string from errno value.
Definition
syserror.cpp:18
syserror.h
tinyformat.h
strprintf
#define strprintf
Format arguments and return the string or write to given std::ostream (see tinyformat::format doc for...
Definition
tinyformat.h:1172
Generated on
for Bitcoin Core by
1.18.0