summaryrefslogtreecommitdiff
path: root/Kernel/KResult.h
AgeCommit message (Collapse)Author
2021-03-04Everywhere: Remove unnecessary `clang-format off`sWilliam McPherson
Mostly due to the fact that clang-format allows aligned comments via AlignTrailingComments. We could also use raw string literals in inline asm, which clang-format deals with properly (and would be nicer in a lot of places).
2021-02-28Kernel: Use default con/de-structorsBen Wiederhake
This may seem like a no-op change, however it shrinks down the Kernel by a bit: .text -432 .unmap_after_init -60 .data -480 .debug_info -673 .debug_aranges 8 .debug_ranges -232 .debug_line -558 .debug_str -308 .debug_frame -40 With '= default', the compiler can do more inlining, hence the savings. I intentionally omitted some opportunities for '= default', because they would increase the Kernel size.
2021-02-23Everywhere: Rename ASSERT => VERIFYAndreas Kling
(...and ASSERT_NOT_REACHED => VERIFY_NOT_REACHED) Since all of these checks are done in release builds as well, let's rename them to VERIFY to prevent confusion, as everyone is used to assertions being compiled out in release. We can introduce a new ASSERT macro that is specifically for debug checks, but I'm doing this wholesale conversion first since we've accumulated thousands of these already, and it's not immediately obvious which ones are suitable for ASSERT.
2021-02-15Kernel: Mark KResult getters as [[nodiscard]]Brian Gianforcaro
There is no reason to call a getter without observing the result, doing so indicates an error in the code. Mark these methods as [[nodiscard]] to find these cases.
2021-02-08Kernel: KResultOr can use the same storage as the object for the errorTom
Since it can only hold either an object or an error code, we can share the same storage to hold either.
2021-02-07Kernel: Fix KResultOr copy-move from itself caseTom
If move-assigning from itself we shouldn't do anything.
2021-02-07Kernel: Change KResultOr::take_value to use move semanticsTom
This may be more light weight than copying the object.
2021-01-22Everywhere: Replace a bundle of dbg with dbgln.asynts
These changes are arbitrarily divided into multiple commits to make it easier to find potentially introduced bugs with git bisect.
2021-01-20Kernel+LibC: Turn errno codes into a strongly typed enumAndreas Kling
..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.
2021-01-16Kernel: Fix inverted logic in KResultOrBen Wiederhake
This silly inversion has survived so long because we don't exercise the 'unhappy paths' enough. :^)
2020-12-31Everywhere: Re-format with clang-format-11Linus Groh
Compared to version 10 this fixes a bunch of formatting issues, mostly around structs/classes with attributes like [[gnu::packed]], and incorrect insertion of spaces in parameter types ("T &"/"T &&"). I also removed a bunch of // clang-format off/on and FIXME comments that are no longer relevant - on the other hand it tried to destroy a couple of neatly formatted comments, so I had to add some as well.
2020-09-25Meta+Kernel: Make clang-format-10 cleanBen Wiederhake
2020-09-19Kernel: Fix KResultOr move semanticsTom
We need to track whether we actually own the storage.
2020-08-09Kernel: Decorate KResult and KResultOr<T> methods with [[nodiscard]]Brian Gianforcaro
This would have found my error propagation bug.
2020-08-05Kernel: Decorate KResult with [[nodiscard]]Brian Gianforcaro
2020-08-05Kernel: Decorate KResultOr with [[nodiscard]] to catch misbehaving callersBrian Gianforcaro
The [[nodiscard]] decorator enables us to have the compile emit a warning anytime the decorated type or function's return value isn't observed. It's very useful for catching error checking bugs in systems which use C style error handling.
2020-06-02Kernel: Always inline some KResult / KResultOr<> methodsSergey Bugaev
Namely, those that contain assertions that can be easily eliminated at call site.
2020-05-20AK+Kernel: Help the compiler inline a bunch of trivial methodsSergey Bugaev
If these methods get inlined, the compiler is able to statically eliminate most of the assertions. Alas, it doesn't realize this, and believes inlining them to be too expensive. So give it a strong hint that it's not the case. This *decreases* the kernel binary size.
2020-04-10Kernel+LibC: Remove ESUCCESSAndreas Kling
There's no official ESUCCESS==0 errno code, and it keeps breaking the Lagom build when we use it, so let's just say 0 instead.
2020-02-16Kernel: Move all code into the Kernel namespaceAndreas Kling
2020-02-08Kernel: Add KResultOr<T>::result()Andreas Kling
This is just a handy way to get either an error or a KSuccess, even if there is a T present.
2020-01-18Meta: Add license header to source filesAndreas Kling
As suggested by Joshua, this commit adds the 2-clause BSD license as a comment block to the top of every source file. For the first pass, I've just added myself for simplicity. I encourage everyone to add themselves as copyright holders of any file they've added or modified in some significant way. If I've added myself in error somewhere, feel free to replace it with the appropriate copyright holder instead. Going forward, all new source files should include a license header.
2020-01-06Kernel: Add KResult::error() to make it look symmetrical with KResultOrAndreas Kling
2019-12-29Kernel: Add move assign operator to KResultOrAndrew Kaster
2019-08-02Kernel: Align the KResult value storage appropriately.Andreas Kling
We should figure out how to convert this code to using AK::Result.
2019-06-14Kernel: Fix KResultOr move constructor not copying errors.Sergey Bugaev
2019-06-07Meta: Tweak .clang-format to not wrap braces after enums.Andreas Kling
2019-05-28Add clang-format fileRobin Burchell
Also run it across the whole tree to get everything using the One True Style. We don't yet run this in an automated fashion as it's a little slow, but there is a snippet to do so in makeall.sh.
2019-04-09Kernel: Yet more work on bringing up POSIX SHM.Andreas Kling
2019-03-06Kernel: Port more code to KResult and KResultOr<T>.Andreas Kling
2019-02-27Kernel: Use KResult in unlink() and rmdir().Andreas Kling
2019-02-26LibC: Make errno codes be #defines instead of enum values.Andreas Kling
It turns out that a lot of 3rd party software does things like: #ifdef EINTR ... #endif This won't work if EINTR is an enum. So much for that nice idea.
2019-02-25Kernel: Add KResult and KResultOr<T> classes.Andreas Kling
The idea here is to combine a potential syscall error code with an arbitrary type in the case of success. I feel like this will end up much less error prone than returning some arbitrary type that kinda sorta has bool semantics (but sometimes not really) and passing the error through an out-param. This patch only converts a few syscalls to using it. More to come.