mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 00:31:14 +00:00
Kernel: Make the getsockname/getpeername syscall helper a bit nicer
Instead of templatizing on a bool parameter, use an enum for clarity.
This commit is contained in:
parent
5bc7882b68
commit
3371165588
Notes:
sideshowbarker
2024-07-17 22:09:47 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/3371165588 Pull-request: https://github.com/SerenityOS/serenity/pull/18163 Reviewed-by: https://github.com/Hendiadyoin1
|
@ -454,7 +454,11 @@ public:
|
|||
ErrorOr<FlatPtr> sys$jail_attach(Userspace<Syscall::SC_jail_attach_params const*> user_params);
|
||||
ErrorOr<FlatPtr> sys$get_root_session_id(pid_t force_sid);
|
||||
|
||||
template<bool sockname, typename Params>
|
||||
enum SockOrPeerName {
|
||||
SockName,
|
||||
PeerName,
|
||||
};
|
||||
template<SockOrPeerName, typename Params>
|
||||
ErrorOr<void> get_sock_or_peer_name(Params const&);
|
||||
|
||||
static void initialize();
|
||||
|
|
|
@ -325,7 +325,7 @@ ErrorOr<FlatPtr> Process::sys$recvmsg(int sockfd, Userspace<struct msghdr*> user
|
|||
return result.value();
|
||||
}
|
||||
|
||||
template<bool sockname, typename Params>
|
||||
template<Process::SockOrPeerName sock_or_peer_name, typename Params>
|
||||
ErrorOr<void> Process::get_sock_or_peer_name(Params const& params)
|
||||
{
|
||||
socklen_t addrlen_value;
|
||||
|
@ -343,7 +343,7 @@ ErrorOr<void> Process::get_sock_or_peer_name(Params const& params)
|
|||
|
||||
sockaddr_un address_buffer {};
|
||||
addrlen_value = min(sizeof(sockaddr_un), static_cast<size_t>(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<FlatPtr> Process::sys$getsockname(Userspace<Syscall::SC_getsockname_para
|
|||
{
|
||||
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
|
||||
auto params = TRY(copy_typed_from_user(user_params));
|
||||
TRY(get_sock_or_peer_name<true>(params));
|
||||
TRY(get_sock_or_peer_name<SockOrPeerName::SockName>(params));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -363,7 +363,7 @@ ErrorOr<FlatPtr> Process::sys$getpeername(Userspace<Syscall::SC_getpeername_para
|
|||
{
|
||||
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
|
||||
auto params = TRY(copy_typed_from_user(user_params));
|
||||
TRY(get_sock_or_peer_name<false>(params));
|
||||
TRY(get_sock_or_peer_name<SockOrPeerName::PeerName>(params));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue