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:
parent
e279b45aed
commit
19d3f8cab7
48 changed files with 591 additions and 506 deletions
|
@ -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));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue