From 33711655885dd4450120272d872972fba5f78292 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 3 Apr 2023 18:26:46 +0200 Subject: [PATCH] Kernel: Make the getsockname/getpeername syscall helper a bit nicer Instead of templatizing on a bool parameter, use an enum for clarity. --- Kernel/Process.h | 6 +++++- Kernel/Syscalls/socket.cpp | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Kernel/Process.h b/Kernel/Process.h index 90ee2cbba8..43e6159555 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -454,7 +454,11 @@ public: ErrorOr sys$jail_attach(Userspace user_params); ErrorOr sys$get_root_session_id(pid_t force_sid); - template + enum SockOrPeerName { + SockName, + PeerName, + }; + template ErrorOr get_sock_or_peer_name(Params const&); static void initialize(); diff --git a/Kernel/Syscalls/socket.cpp b/Kernel/Syscalls/socket.cpp index fb2b521d6c..d7746ab468 100644 --- a/Kernel/Syscalls/socket.cpp +++ b/Kernel/Syscalls/socket.cpp @@ -325,7 +325,7 @@ ErrorOr Process::sys$recvmsg(int sockfd, Userspace user return result.value(); } -template +template ErrorOr Process::get_sock_or_peer_name(Params const& params) { socklen_t addrlen_value; @@ -343,7 +343,7 @@ ErrorOr Process::get_sock_or_peer_name(Params const& params) sockaddr_un address_buffer {}; addrlen_value = min(sizeof(sockaddr_un), static_cast(addrlen_value)); - if constexpr (sockname) + if constexpr (sock_or_peer_name == SockOrPeerName::SockName) socket.get_local_address((sockaddr*)&address_buffer, &addrlen_value); else socket.get_peer_address((sockaddr*)&address_buffer, &addrlen_value); @@ -355,7 +355,7 @@ ErrorOr Process::sys$getsockname(Userspace(params)); + TRY(get_sock_or_peer_name(params)); return 0; } @@ -363,7 +363,7 @@ ErrorOr Process::sys$getpeername(Userspace(params)); + TRY(get_sock_or_peer_name(params)); return 0; }