libcarla/include/system/boost/process/v2/impl/error.ipp
2024-10-18 13:19:59 +08:00

207 lines
6.9 KiB
C++

// Copyright (c) 2021 Klemens D. Morgenstern
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_PROCESS_V2_IMPL_ERROR_IPP
#define BOOST_PROCESS_V2_IMPL_ERROR_IPP
#include <boost/process/v2/detail/config.hpp>
#include <boost/process/v2/error.hpp>
#include <boost/process/v2/exit_code.hpp>
#include <cstdlib>
#if defined(BOOST_PROCESS_V2_POSIX)
#include <sys/wait.h>
#endif
BOOST_PROCESS_V2_BEGIN_NAMESPACE
namespace error
{
namespace detail
{
struct utf8_category final : public error_category
{
utf8_category() : error_category(0xDAEDu) {}
const char* name() const noexcept
{
return "process.v2.utf8";
}
std::string message(int value) const
{
switch (static_cast<utf8_conv_error>(value))
{
case utf8_conv_error::insufficient_buffer:
return "A supplied buffer size was not large enough";
case utf8_conv_error::invalid_character:
return "Invalid characters were found in a string.";
default:
return "process.v2.utf8 error";
}
}
};
struct exit_code_category final : public error_category
{
exit_code_category() : error_category(0xDAEEu) {}
const char* name() const noexcept
{
return "process.v2.exit_code";
}
std::string message(int status) const
{
switch (status)
{
case v2::detail::still_active:
return "still-active";
case EXIT_SUCCESS:
return "exit_success";
case EXIT_FAILURE:
return "exit_failure";
default:
#if defined(BOOST_PROCESS_V2_POSIX)
if (WIFCONTINUED(status))
return "continued";
switch (WTERMSIG(status))
{
# if defined(SIGABRT)
case SIGABRT: return "SIGABRT: Abort signal from abort(3)";
# endif
# if defined(SIGALRM)
case SIGALRM: return "SIGALRM: Timer signal from alarm(2)";
# endif
# if defined(SIGBUS)
case SIGBUS: return "SIGBUS: Bus error (bad memory access)";
# endif
# if defined(SIGCHLD)
case SIGCHLD: return "SIGCHLD: Child stopped or terminated";
# endif
# if defined(SIGCONT)
case SIGCONT: return "SIGCONT: Continue if stopped";
# endif
# if defined(SIGEMT)
case SIGEMT: return "SIGEMT: Emulator trap";
# endif
# if defined(SIGFPE)
case SIGFPE: return "SIGFPE: Floating-point exception";
# endif
# if defined(SIGHUP)
case SIGHUP: return "SIGHUP: Hangup detected on controlling terminal";
# endif
# if defined(SIGILL)
case SIGILL: return "SIGILL: Illegal Instruction";
# endif
# if defined(SIGINFO)
case SIGINFO: return "SIGINFO: A synonym for SIGPWR";
# endif
# if defined(SIGINT)
case SIGINT: return "SIGINT: Interrupt from keyboard";
# endif
# if defined(SIGIO)
case SIGIO: return "SIGIO: I/O now possible (4.2BSD)";
# endif
# if defined(SIGKILL)
case SIGKILL: return "SIGKILL: Kill signal";
# endif
# if defined(SIGLOST)
case SIGLOST: return "SIGLOST: File lock lost (unused)";
# endif
# if defined(SIGPIPE)
case SIGPIPE: return "SIGPIPE: Broken pipe: write to pipe with no";
# endif
# if defined(SIGPOLL) && !defined(SIGIO)
case SIGPOLL: return "SIGPOLL: Pollable event (Sys V);";
# endif
# if defined(SIGPROF)
case SIGPROF: return "SIGPROF: Profiling timer expired";
# endif
# if defined(SIGPWR)
case SIGPWR: return "SIGPWR: Power failure (System V)";
# endif
# if defined(SIGQUIT)
case SIGQUIT: return "SIGQUIT: Quit from keyboard";
# endif
# if defined(SIGSEGV)
case SIGSEGV: return "SIGSEGV: Invalid memory reference";
# endif
# if defined(SIGSTKFLT)
case SIGSTKFLT: return "SIGSTKFLT: Stack fault on coprocessor (unused)";
# endif
# if defined(SIGSTOP)
case SIGSTOP: return "SIGSTOP: Stop process";
# endif
# if defined(SIGTSTP)
case SIGTSTP: return "SIGTSTP: Stop typed at terminal";
# endif
# if defined(SIGSYS)
case SIGSYS: return "SIGSYS: Bad system call (SVr4);";
# endif
# if defined(SIGTERM)
case SIGTERM: return "SIGTERM: Termination signal";
# endif
# if defined(SIGTRAP)
case SIGTRAP: return "SIGTRAP: Trace/breakpoint trap";
# endif
# if defined(SIGTTIN)
case SIGTTIN: return "SIGTTIN: Terminal input for background process";
# endif
# if defined(SIGTTOU)
case SIGTTOU: return "SIGTTOU: Terminal output for background process";
# endif
# if defined(SIGURG)
case SIGURG: return "SIGURG: Urgent condition on socket (4.2BSD)";
# endif
# if defined(SIGUSR1)
case SIGUSR1: return "SIGUSR1: User-defined signal 1";
# endif
# if defined(SIGUSR2)
case SIGUSR2: return "SIGUSR2: User-defined signal 2";
# endif
# if defined(SIGVTALRM)
case SIGVTALRM: return "SIGVTALRM: Virtual alarm clock (4.2BSD)";
# endif
# if defined(SIGXCPU)
case SIGXCPU: return "SIGXCPU: CPU time limit exceeded (4.2BSD);";
# endif
# if defined(SIGXFSZ)
case SIGXFSZ: return "SIGXFSZ: File size limit exceeded (4.2BSD);";
# endif
# if defined(SIGWINCH)
case SIGWINCH: return "SIGWINCH: Window resize signal (4.3BSD, Sun)";
# endif
default: return "Unknown signal";
}
#endif
return "exited with other error";
}
}
};
} // namespace detail
BOOST_PROCESS_V2_DECL const error_category& get_utf8_category()
{
static detail::utf8_category instance;
return instance;
}
BOOST_PROCESS_V2_DECL const error_category& get_exit_code_category()
{
static detail::exit_code_category instance;
return instance;
}
}
BOOST_PROCESS_V2_END_NAMESPACE
#endif //BOOST_PROCESS_V2_IMPL_ERROR_IPP