parent
a5d5d1b9fd
commit
a293133f29
@ -0,0 +1,3 @@
|
||||
#include "error.h"
|
||||
|
||||
_Thread_local internal enum cow_err_kind _cow_last_error = COW_ERR_NONE;
|
@ -0,0 +1,46 @@
|
||||
#include <array>
|
||||
|
||||
#include <cow.h>
|
||||
|
||||
#include "error.h"
|
||||
|
||||
namespace _cow_error {
|
||||
constexpr const size_t SIZE = (size_t)_COW_ERR_SIZE;
|
||||
|
||||
consteval inline void setmsg(std::array<const char*, SIZE>& ar, enum cow_err_kind kind, const char* msg)
|
||||
{
|
||||
ar[kind] = msg;
|
||||
}
|
||||
|
||||
consteval inline std::array<const char*, SIZE> gen_msg_table()
|
||||
{
|
||||
std::array<const char*, SIZE> ret;
|
||||
|
||||
setmsg(ret, COW_ERR_UNKNOWN, "unknown error");
|
||||
setmsg(ret, COW_ERR_NONE, "success");
|
||||
setmsg(ret, COW_ERR_FDCREATE, "failed to create shmfd (memfd_create())");
|
||||
setmsg(ret, COW_ERR_SIZE, "failed to set shmfd size (ftruncate())");
|
||||
setmsg(ret, COW_ERR_MAP, "failed to map shmfd (mmap())");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
const std::array<const char*, SIZE> _cow_message_table = gen_msg_table();
|
||||
}
|
||||
using namespace _cow_error;
|
||||
|
||||
extern "C" {
|
||||
|
||||
enum cow_err_kind cow_err() {
|
||||
return _cow_last_error;
|
||||
}
|
||||
internal void _cow_set_err(enum cow_err_kind kind) {
|
||||
_cow_last_error = kind;
|
||||
}
|
||||
const char* const * cow_err_msg(enum cow_err_kind kind)
|
||||
{
|
||||
auto idx = ((size_t)kind);
|
||||
if ( idx >= SIZE ) return nullptr;
|
||||
else return &_cow_message_table[idx];
|
||||
}
|
||||
}
|
Loading…
Reference in new issue