mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 07:17:35 +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
2 changed files with 9 additions and 5 deletions
|
@ -454,7 +454,11 @@ public:
|
||||||
ErrorOr<FlatPtr> sys$jail_attach(Userspace<Syscall::SC_jail_attach_params const*> user_params);
|
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);
|
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&);
|
ErrorOr<void> get_sock_or_peer_name(Params const&);
|
||||||
|
|
||||||
static void initialize();
|
static void initialize();
|
||||||
|
|
|
@ -325,7 +325,7 @@ ErrorOr<FlatPtr> Process::sys$recvmsg(int sockfd, Userspace<struct msghdr*> user
|
||||||
return result.value();
|
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)
|
ErrorOr<void> Process::get_sock_or_peer_name(Params const& params)
|
||||||
{
|
{
|
||||||
socklen_t addrlen_value;
|
socklen_t addrlen_value;
|
||||||
|
@ -343,7 +343,7 @@ ErrorOr<void> Process::get_sock_or_peer_name(Params const& params)
|
||||||
|
|
||||||
sockaddr_un address_buffer {};
|
sockaddr_un address_buffer {};
|
||||||
addrlen_value = min(sizeof(sockaddr_un), static_cast<size_t>(addrlen_value));
|
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);
|
socket.get_local_address((sockaddr*)&address_buffer, &addrlen_value);
|
||||||
else
|
else
|
||||||
socket.get_peer_address((sockaddr*)&address_buffer, &addrlen_value);
|
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);
|
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
|
||||||
auto params = TRY(copy_typed_from_user(user_params));
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,7 +363,7 @@ ErrorOr<FlatPtr> Process::sys$getpeername(Userspace<Syscall::SC_getpeername_para
|
||||||
{
|
{
|
||||||
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
|
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
|
||||||
auto params = TRY(copy_typed_from_user(user_params));
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue