You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.2 KiB
48 lines
1.2 KiB
#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())");
|
|
setmsg(ret, COW_ERR_POISONED, "trying to use a poisoned cow");
|
|
|
|
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];
|
|
}
|
|
}
|