1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:17:44 +00:00

Kernel+LibC: Turn errno codes into a strongly typed enum

..and allow implicit creation of KResult and KResultOr from ErrnoCode.
This means that kernel functions that return those types can finally
do "return EINVAL;" and it will just work.

There's a handful of functions that still deal with signed integers
that should be converted to return KResults.
This commit is contained in:
Andreas Kling 2021-01-20 23:11:17 +01:00
parent e279b45aed
commit 19d3f8cab7
48 changed files with 591 additions and 506 deletions

View file

@ -27,6 +27,8 @@
#pragma once
#include <AK/Assertions.h>
#include <AK/Platform.h>
#include <AK/StdLibExtras.h>
#include <LibC/errno_numbers.h>
namespace Kernel {
@ -37,10 +39,9 @@ enum KSuccessTag {
class [[nodiscard]] KResult {
public:
ALWAYS_INLINE explicit KResult(int negative_e)
: m_error(negative_e)
KResult(ErrnoCode error)
: m_error(-error)
{
ASSERT(negative_e <= 0);
}
KResult(KSuccessTag)
: m_error(0)
@ -69,6 +70,12 @@ public:
{
}
KResultOr(ErrnoCode error)
: m_error(error)
, m_is_error(true)
{
}
ALWAYS_INLINE KResultOr(T&& value)
{
new (&m_storage) T(move(value));