mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 12:57:34 +00:00
Kernel: Replace KResult and KResultOr<T> with Error and ErrorOr<T>
We now use AK::Error and AK::ErrorOr<T> in both kernel and userspace! This was a slightly tedious refactoring that took a long time, so it's not unlikely that some bugs crept in. Nevertheless, it does pass basic functionality testing, and it's just real nice to finally see the same pattern in all contexts. :^)
This commit is contained in:
parent
7ee10c6926
commit
79fa9765ca
262 changed files with 2415 additions and 2600 deletions
|
@ -6,11 +6,11 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <AK/Error.h>
|
||||
#include <AK/NonnullRefPtrVector.h>
|
||||
#include <AK/RefCounted.h>
|
||||
#include <AK/RefPtr.h>
|
||||
#include <AK/Time.h>
|
||||
#include <Kernel/API/KResult.h>
|
||||
#include <Kernel/FileSystem/File.h>
|
||||
#include <Kernel/Locking/Mutex.h>
|
||||
#include <Kernel/Net/NetworkAdapter.h>
|
||||
|
@ -27,7 +27,7 @@ class OpenFileDescription;
|
|||
|
||||
class Socket : public File {
|
||||
public:
|
||||
static KResultOr<NonnullRefPtr<Socket>> create(int domain, int type, int protocol);
|
||||
static ErrorOr<NonnullRefPtr<Socket>> create(int domain, int type, int protocol);
|
||||
virtual ~Socket() override;
|
||||
|
||||
int domain() const { return m_domain; }
|
||||
|
@ -76,20 +76,20 @@ public:
|
|||
bool can_accept() const { return !m_pending.is_empty(); }
|
||||
RefPtr<Socket> accept();
|
||||
|
||||
KResult shutdown(int how);
|
||||
ErrorOr<void> shutdown(int how);
|
||||
|
||||
virtual KResult bind(Userspace<const sockaddr*>, socklen_t) = 0;
|
||||
virtual KResult connect(OpenFileDescription&, Userspace<const sockaddr*>, socklen_t, ShouldBlock) = 0;
|
||||
virtual KResult listen(size_t) = 0;
|
||||
virtual ErrorOr<void> bind(Userspace<const sockaddr*>, socklen_t) = 0;
|
||||
virtual ErrorOr<void> connect(OpenFileDescription&, Userspace<const sockaddr*>, socklen_t, ShouldBlock) = 0;
|
||||
virtual ErrorOr<void> listen(size_t) = 0;
|
||||
virtual void get_local_address(sockaddr*, socklen_t*) = 0;
|
||||
virtual void get_peer_address(sockaddr*, socklen_t*) = 0;
|
||||
virtual bool is_local() const { return false; }
|
||||
virtual bool is_ipv4() const { return false; }
|
||||
virtual KResultOr<size_t> sendto(OpenFileDescription&, const UserOrKernelBuffer&, size_t, int flags, Userspace<const sockaddr*>, socklen_t) = 0;
|
||||
virtual KResultOr<size_t> recvfrom(OpenFileDescription&, UserOrKernelBuffer&, size_t, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&) = 0;
|
||||
virtual ErrorOr<size_t> sendto(OpenFileDescription&, const UserOrKernelBuffer&, size_t, int flags, Userspace<const sockaddr*>, socklen_t) = 0;
|
||||
virtual ErrorOr<size_t> recvfrom(OpenFileDescription&, UserOrKernelBuffer&, size_t, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&) = 0;
|
||||
|
||||
virtual KResult setsockopt(int level, int option, Userspace<const void*>, socklen_t);
|
||||
virtual KResult getsockopt(OpenFileDescription&, int level, int option, Userspace<void*>, Userspace<socklen_t*>);
|
||||
virtual ErrorOr<void> setsockopt(int level, int option, Userspace<const void*>, socklen_t);
|
||||
virtual ErrorOr<void> getsockopt(OpenFileDescription&, int level, int option, Userspace<void*>, Userspace<socklen_t*>);
|
||||
|
||||
ProcessID origin_pid() const { return m_origin.pid; }
|
||||
UserID origin_uid() const { return m_origin.uid; }
|
||||
|
@ -102,10 +102,10 @@ public:
|
|||
Mutex& mutex() { return m_mutex; }
|
||||
|
||||
// ^File
|
||||
virtual KResultOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override final;
|
||||
virtual KResultOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override final;
|
||||
virtual KResult stat(::stat&) const override;
|
||||
virtual KResultOr<NonnullOwnPtr<KString>> pseudo_path(const OpenFileDescription&) const override = 0;
|
||||
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override final;
|
||||
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override final;
|
||||
virtual ErrorOr<void> stat(::stat&) const override;
|
||||
virtual ErrorOr<NonnullOwnPtr<KString>> pseudo_path(const OpenFileDescription&) const override = 0;
|
||||
|
||||
bool has_receive_timeout() const { return m_receive_timeout != Time::zero(); }
|
||||
const Time& receive_timeout() const { return m_receive_timeout; }
|
||||
|
@ -118,7 +118,7 @@ public:
|
|||
protected:
|
||||
Socket(int domain, int type, int protocol);
|
||||
|
||||
KResult queue_connection_from(NonnullRefPtr<Socket>);
|
||||
ErrorOr<void> queue_connection_from(NonnullRefPtr<Socket>);
|
||||
|
||||
size_t backlog() const { return m_backlog; }
|
||||
void set_backlog(size_t backlog) { m_backlog = backlog; }
|
||||
|
@ -130,13 +130,25 @@ protected:
|
|||
|
||||
Role m_role { Role::None };
|
||||
|
||||
KResult so_error() const { return m_so_error; }
|
||||
KResult set_so_error(KResult error)
|
||||
ErrorOr<void> so_error() const { return m_so_error; }
|
||||
|
||||
Error set_so_error(ErrnoCode error_code)
|
||||
{
|
||||
auto error = Error::from_errno(error_code);
|
||||
m_so_error = error;
|
||||
return error;
|
||||
}
|
||||
Error set_so_error(Error error)
|
||||
{
|
||||
m_so_error = error;
|
||||
return error;
|
||||
}
|
||||
|
||||
void clear_so_error()
|
||||
{
|
||||
m_so_error = {};
|
||||
}
|
||||
|
||||
void set_origin(Process const&);
|
||||
void set_acceptor(Process const&);
|
||||
|
||||
|
@ -166,7 +178,7 @@ private:
|
|||
Time m_send_timeout {};
|
||||
int m_timestamp { 0 };
|
||||
|
||||
KResult m_so_error { KSuccess };
|
||||
ErrorOr<void> m_so_error;
|
||||
|
||||
NonnullRefPtrVector<Socket> m_pending;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue