1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 03:37:45 +00:00

Kernel: Add explicit offset parameter to File::read etc

This commit is contained in:
Conrad Pankoff 2020-04-10 19:44:42 +10:00 committed by Andreas Kling
parent 68c7ca7d3b
commit a3edeb5868
45 changed files with 199 additions and 183 deletions

View file

@ -168,7 +168,7 @@ void IPv4Socket::detach(FileDescription&)
{
}
bool IPv4Socket::can_read(const FileDescription&) const
bool IPv4Socket::can_read(const FileDescription&, size_t) const
{
if (m_role == Role::Listener)
return can_accept();
@ -177,7 +177,7 @@ bool IPv4Socket::can_read(const FileDescription&) const
return m_can_read;
}
bool IPv4Socket::can_write(const FileDescription&) const
bool IPv4Socket::can_write(const FileDescription&, size_t) const
{
return is_connected();
}

View file

@ -56,8 +56,8 @@ public:
virtual void get_peer_address(sockaddr*, socklen_t*) override;
virtual void attach(FileDescription&) override;
virtual void detach(FileDescription&) override;
virtual bool can_read(const FileDescription&) const override;
virtual bool can_write(const FileDescription&) const override;
virtual bool can_read(const FileDescription&, size_t) const override;
virtual bool can_write(const FileDescription&, size_t) const override;
virtual ssize_t sendto(FileDescription&, const void*, size_t, int, const sockaddr*, socklen_t) override;
virtual ssize_t recvfrom(FileDescription&, void*, size_t, int flags, sockaddr*, socklen_t*) override;
virtual KResult setsockopt(int level, int option, const void*, socklen_t) override;

View file

@ -227,7 +227,7 @@ void LocalSocket::detach(FileDescription& description)
}
}
bool LocalSocket::can_read(const FileDescription& description) const
bool LocalSocket::can_read(const FileDescription& description, size_t) const
{
auto role = this->role(description);
if (role == Role::Listener)
@ -249,7 +249,7 @@ bool LocalSocket::has_attached_peer(const FileDescription& description) const
ASSERT_NOT_REACHED();
}
bool LocalSocket::can_write(const FileDescription& description) const
bool LocalSocket::can_write(const FileDescription& description, size_t) const
{
auto role = this->role(description);
if (role == Role::Accepted)
@ -298,7 +298,7 @@ ssize_t LocalSocket::recvfrom(FileDescription& description, void* buffer, size_t
return 0;
return -EAGAIN;
}
} else if (!can_read(description)) {
} else if (!can_read(description, 0)) {
auto result = Thread::current->block<Thread::ReadBlocker>(description);
if (result != Thread::BlockResult::WokeNormally)
return -EINTR;

View file

@ -55,8 +55,8 @@ public:
virtual void get_peer_address(sockaddr*, socklen_t*) override;
virtual void attach(FileDescription&) override;
virtual void detach(FileDescription&) override;
virtual bool can_read(const FileDescription&) const override;
virtual bool can_write(const FileDescription&) const override;
virtual bool can_read(const FileDescription&, size_t) const override;
virtual bool can_write(const FileDescription&, size_t) const override;
virtual ssize_t sendto(FileDescription&, const void*, size_t, int, const sockaddr*, socklen_t) override;
virtual ssize_t recvfrom(FileDescription&, void*, size_t, int flags, sockaddr*, socklen_t*) override;
virtual KResult getsockopt(FileDescription&, int level, int option, void*, socklen_t*) override;

View file

@ -176,14 +176,14 @@ KResult Socket::getsockopt(FileDescription&, int level, int option, void* value,
}
}
ssize_t Socket::read(FileDescription& description, u8* buffer, ssize_t size)
ssize_t Socket::read(FileDescription& description, size_t, u8* buffer, ssize_t size)
{
if (is_shut_down_for_reading())
return 0;
return recvfrom(description, buffer, size, 0, nullptr, 0);
}
ssize_t Socket::write(FileDescription& description, const u8* data, ssize_t size)
ssize_t Socket::write(FileDescription& description, size_t, const u8* data, ssize_t size)
{
if (is_shut_down_for_writing())
return -EPIPE;

View file

@ -124,8 +124,8 @@ public:
Lock& lock() { return m_lock; }
// ^File
virtual ssize_t read(FileDescription&, u8*, ssize_t) override final;
virtual ssize_t write(FileDescription&, const u8*, ssize_t) override final;
virtual ssize_t read(FileDescription&, size_t, u8*, ssize_t) override final;
virtual ssize_t write(FileDescription&, size_t, const u8*, ssize_t) override final;
virtual String absolute_path(const FileDescription&) const override = 0;
bool has_receive_timeout() const { return m_receive_timeout.tv_sec || m_receive_timeout.tv_usec; }