mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 06:07:34 +00:00
Kernel: Stop allowing implicit conversion from KResult to int
This patch removes KResult::operator int() and deals with the fallout. This forces a lot of code to be more explicit in its handling of errors, greatly improving readability.
This commit is contained in:
parent
d30d776ca4
commit
7676edfb9b
14 changed files with 51 additions and 52 deletions
|
@ -137,7 +137,7 @@ KResult IPv4Socket::listen(size_t backlog)
|
|||
{
|
||||
MutexLocker locker(lock());
|
||||
auto result = allocate_local_port_if_needed();
|
||||
if (result.error_or_port.is_error() && result.error_or_port.error() != -ENOPROTOOPT)
|
||||
if (result.error_or_port.is_error() && result.error_or_port.error() != ENOPROTOOPT)
|
||||
return result.error_or_port.error();
|
||||
|
||||
set_backlog(backlog);
|
||||
|
@ -231,7 +231,7 @@ KResultOr<size_t> IPv4Socket::sendto(FileDescription&, const UserOrKernelBuffer&
|
|||
if (m_local_address.to_u32() == 0)
|
||||
m_local_address = routing_decision.adapter->ipv4_address();
|
||||
|
||||
if (auto result = allocate_local_port_if_needed(); result.error_or_port.is_error() && result.error_or_port.error() != -ENOPROTOOPT)
|
||||
if (auto result = allocate_local_port_if_needed(); result.error_or_port.is_error() && result.error_or_port.error() != ENOPROTOOPT)
|
||||
return result.error_or_port.error();
|
||||
|
||||
dbgln_if(IPV4_SOCKET_DEBUG, "sendto: destination={}:{}", m_peer_address, m_peer_port);
|
||||
|
|
|
@ -139,7 +139,7 @@ KResult LocalSocket::bind(Userspace<const sockaddr*> user_address, socklen_t add
|
|||
UidAndGid owner { m_prebind_uid, m_prebind_gid };
|
||||
auto result = VirtualFileSystem::the().open(path, O_CREAT | O_EXCL | O_NOFOLLOW_NOERROR, mode, Process::current()->current_directory(), owner);
|
||||
if (result.is_error()) {
|
||||
if (result.error() == -EEXIST)
|
||||
if (result.error() == EEXIST)
|
||||
return set_so_error(EADDRINUSE);
|
||||
return result.error();
|
||||
}
|
||||
|
|
|
@ -423,7 +423,6 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
|
||||
socket->receive_tcp_packet(tcp_packet, ipv4_packet.payload_size());
|
||||
|
||||
[[maybe_unused]] int unused_rc {};
|
||||
switch (socket->state()) {
|
||||
case TCPSocket::State::Closed:
|
||||
dbgln("handle_tcp: unexpected flags in Closed state");
|
||||
|
@ -431,7 +430,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
return;
|
||||
case TCPSocket::State::TimeWait:
|
||||
dbgln("handle_tcp: unexpected flags in TimeWait state");
|
||||
unused_rc = socket->send_tcp_packet(TCPFlags::RST);
|
||||
(void)socket->send_tcp_packet(TCPFlags::RST);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
return;
|
||||
case TCPSocket::State::Listen:
|
||||
|
@ -462,12 +461,12 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
switch (tcp_packet.flags()) {
|
||||
case TCPFlags::SYN:
|
||||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
|
||||
unused_rc = socket->send_ack(true);
|
||||
(void)socket->send_ack(true);
|
||||
socket->set_state(TCPSocket::State::SynReceived);
|
||||
return;
|
||||
case TCPFlags::ACK | TCPFlags::SYN:
|
||||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
|
||||
unused_rc = socket->send_ack(true);
|
||||
(void)socket->send_ack(true);
|
||||
socket->set_state(TCPSocket::State::Established);
|
||||
socket->set_setup_state(Socket::SetupState::Completed);
|
||||
socket->set_connected(true);
|
||||
|
@ -486,7 +485,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
return;
|
||||
default:
|
||||
dbgln("handle_tcp: unexpected flags in SynSent state ({:x})", tcp_packet.flags());
|
||||
unused_rc = socket->send_tcp_packet(TCPFlags::RST);
|
||||
(void)socket->send_tcp_packet(TCPFlags::RST);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
socket->set_error(TCPSocket::Error::UnexpectedFlagsDuringConnect);
|
||||
socket->set_setup_state(Socket::SetupState::Completed);
|
||||
|
@ -501,7 +500,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
case TCPSocket::Direction::Incoming:
|
||||
if (!socket->has_originator()) {
|
||||
dbgln("handle_tcp: connection doesn't have an originating socket; maybe it went away?");
|
||||
unused_rc = socket->send_tcp_packet(TCPFlags::RST);
|
||||
(void)socket->send_tcp_packet(TCPFlags::RST);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
return;
|
||||
}
|
||||
|
@ -517,7 +516,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
return;
|
||||
default:
|
||||
dbgln("handle_tcp: got ACK in SynReceived state but direction is invalid ({})", TCPSocket::to_string(socket->direction()));
|
||||
unused_rc = socket->send_tcp_packet(TCPFlags::RST);
|
||||
(void)socket->send_tcp_packet(TCPFlags::RST);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
return;
|
||||
}
|
||||
|
@ -528,7 +527,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
return;
|
||||
default:
|
||||
dbgln("handle_tcp: unexpected flags in SynReceived state ({:x})", tcp_packet.flags());
|
||||
unused_rc = socket->send_tcp_packet(TCPFlags::RST);
|
||||
(void)socket->send_tcp_packet(TCPFlags::RST);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
return;
|
||||
}
|
||||
|
@ -536,7 +535,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
switch (tcp_packet.flags()) {
|
||||
default:
|
||||
dbgln("handle_tcp: unexpected flags in CloseWait state ({:x})", tcp_packet.flags());
|
||||
unused_rc = socket->send_tcp_packet(TCPFlags::RST);
|
||||
(void)socket->send_tcp_packet(TCPFlags::RST);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
return;
|
||||
}
|
||||
|
@ -548,7 +547,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
return;
|
||||
default:
|
||||
dbgln("handle_tcp: unexpected flags in LastAck state ({:x})", tcp_packet.flags());
|
||||
unused_rc = socket->send_tcp_packet(TCPFlags::RST);
|
||||
(void)socket->send_tcp_packet(TCPFlags::RST);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
return;
|
||||
}
|
||||
|
@ -564,7 +563,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
return;
|
||||
default:
|
||||
dbgln("handle_tcp: unexpected flags in FinWait1 state ({:x})", tcp_packet.flags());
|
||||
unused_rc = socket->send_tcp_packet(TCPFlags::RST);
|
||||
(void)socket->send_tcp_packet(TCPFlags::RST);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
return;
|
||||
}
|
||||
|
@ -579,7 +578,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
return;
|
||||
default:
|
||||
dbgln("handle_tcp: unexpected flags in FinWait2 state ({:x})", tcp_packet.flags());
|
||||
unused_rc = socket->send_tcp_packet(TCPFlags::RST);
|
||||
(void)socket->send_tcp_packet(TCPFlags::RST);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
return;
|
||||
}
|
||||
|
@ -591,7 +590,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
return;
|
||||
default:
|
||||
dbgln("handle_tcp: unexpected flags in Closing state ({:x})", tcp_packet.flags());
|
||||
unused_rc = socket->send_tcp_packet(TCPFlags::RST);
|
||||
(void)socket->send_tcp_packet(TCPFlags::RST);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -184,9 +184,8 @@ KResultOr<size_t> TCPSocket::protocol_send(const UserOrKernelBuffer& data, size_
|
|||
return set_so_error(EHOSTUNREACH);
|
||||
size_t mss = routing_decision.adapter->mtu() - sizeof(IPv4Packet) - sizeof(TCPPacket);
|
||||
data_length = min(data_length, mss);
|
||||
int err = send_tcp_packet(TCPFlags::PUSH | TCPFlags::ACK, &data, data_length, &routing_decision);
|
||||
if (err < 0)
|
||||
return KResult((ErrnoCode)-err);
|
||||
if (auto result = send_tcp_packet(TCPFlags::PUSH | TCPFlags::ACK, &data, data_length, &routing_decision); result.is_error())
|
||||
return result;
|
||||
return data_length;
|
||||
}
|
||||
|
||||
|
@ -414,9 +413,8 @@ KResult TCPSocket::protocol_connect(FileDescription& description, ShouldBlock sh
|
|||
m_ack_number = 0;
|
||||
|
||||
set_setup_state(SetupState::InProgress);
|
||||
int err = send_tcp_packet(TCPFlags::SYN);
|
||||
if (err < 0)
|
||||
return KResult((ErrnoCode)-err);
|
||||
if (auto result = send_tcp_packet(TCPFlags::SYN); result.is_error())
|
||||
return result;
|
||||
m_state = State::SynSent;
|
||||
m_role = Role::Connecting;
|
||||
m_direction = Direction::Outgoing;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue