libclues
Linux C++ Tracing Library
Loading...
Searching...
No Matches
ErrnoResult.cxx
1// cosmos
2#include <cosmos/formatting.hxx>
3#include <cosmos/utils.hxx>
4
5// clues
6#include <clues/ErrnoResult.hxx>
7#include <clues/utils.hxx>
8
9namespace clues {
10
11ErrnoResult::ErrnoResult(const cosmos::Errno code) {
12 const auto kernel_code = KernelErrno{cosmos::to_integral(code)};
13
14 if (kernel_code >= KernelErrno::RESTART_SYS &&
15 kernel_code <= KernelErrno::RESTART_RESTARTBLOCK) {
16 m_kernel_errno = kernel_code;
17 } else {
18 m_errno = code;
19 }
20}
21
22std::string ErrnoResult::str() const {
23
24 if (m_errno) {
25 const auto code = *m_errno;
26 return cosmos::sprintf("%d (%s)",
27 cosmos::to_integral(code), get_errno_label(code));
28 } else {
29 const auto code = *m_kernel_errno;
30 return cosmos::sprintf("%d (%s)",
31 cosmos::to_integral(code), get_kernel_errno_label(code));
32 }
33}
34
35} // end ns
KernelErrno
Errno values that can appear in tracing context.
Definition types.hxx:49
const char * get_errno_label(const cosmos::Errno err)
Returns a short errno label like ENOENT for the given errno integer.
Definition utils.cxx:29
const char * get_kernel_errno_label(const KernelErrno err)
Returns a short errno label for extended KernelErrno codes.
Definition utils.cxx:37