From 371c51f934acc4496645666633224e2371b53f5d Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Sun, 29 Jan 2023 13:49:42 +0100 Subject: [PATCH] AK: Make `SeekableStream::truncate()` take a `size_t` Similar to the return values earlier, a signed value doesn't really make sense here. Relying on the much more standard `size_t` makes it easier to use Stream in all contexts. --- AK/BufferedStream.h | 2 +- AK/MemoryStream.cpp | 2 +- AK/MemoryStream.h | 2 +- AK/Stream.h | 2 +- Userland/Libraries/LibCore/Stream.cpp | 5 ++++- Userland/Libraries/LibCore/Stream.h | 2 +- 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/AK/BufferedStream.h b/AK/BufferedStream.h index cb3c3d59ec0..8ff0c9b8897 100644 --- a/AK/BufferedStream.h +++ b/AK/BufferedStream.h @@ -295,7 +295,7 @@ public: return result; } - virtual ErrorOr truncate(off_t length) override + virtual ErrorOr truncate(size_t length) override { return m_helper.stream().truncate(length); } diff --git a/AK/MemoryStream.cpp b/AK/MemoryStream.cpp index e4b3bc94f36..d4c9659b3a5 100644 --- a/AK/MemoryStream.cpp +++ b/AK/MemoryStream.cpp @@ -48,7 +48,7 @@ void FixedMemoryStream::close() // FIXME: It doesn't make sense to close a memory stream. Therefore, we don't do anything here. Is that fine? } -ErrorOr FixedMemoryStream::truncate(off_t) +ErrorOr FixedMemoryStream::truncate(size_t) { return Error::from_errno(EBADF); } diff --git a/AK/MemoryStream.h b/AK/MemoryStream.h index c19de82cffa..b81310b0634 100644 --- a/AK/MemoryStream.h +++ b/AK/MemoryStream.h @@ -22,7 +22,7 @@ public: virtual bool is_eof() const override; virtual bool is_open() const override; virtual void close() override; - virtual ErrorOr truncate(off_t) override; + virtual ErrorOr truncate(size_t) override; virtual ErrorOr read(Bytes bytes) override; virtual ErrorOr seek(i64 offset, SeekMode seek_mode = SeekMode::SetPosition) override; diff --git a/AK/Stream.h b/AK/Stream.h index 9a039ea8e6c..d01ae9ddb33 100644 --- a/AK/Stream.h +++ b/AK/Stream.h @@ -120,7 +120,7 @@ public: virtual ErrorOr size(); /// Shrinks or extends the stream to the given size. Returns an errno in /// the case of an error. - virtual ErrorOr truncate(off_t length) = 0; + virtual ErrorOr truncate(size_t length) = 0; /// Seeks until after the given amount of bytes to be discarded instead of /// reading and discarding everything manually; virtual ErrorOr discard(size_t discarded_bytes) override; diff --git a/Userland/Libraries/LibCore/Stream.cpp b/Userland/Libraries/LibCore/Stream.cpp index 4d68880315d..dc6d744a450 100644 --- a/Userland/Libraries/LibCore/Stream.cpp +++ b/Userland/Libraries/LibCore/Stream.cpp @@ -184,8 +184,11 @@ ErrorOr File::seek(i64 offset, SeekMode mode) return seek_result; } -ErrorOr File::truncate(off_t length) +ErrorOr File::truncate(size_t length) { + if (length > static_cast(NumericLimits::max())) + return Error::from_string_literal("Length is larger than the maximum supported length"); + return System::ftruncate(m_fd, length); } diff --git a/Userland/Libraries/LibCore/Stream.h b/Userland/Libraries/LibCore/Stream.h index 404600e602c..bc4df1775b0 100644 --- a/Userland/Libraries/LibCore/Stream.h +++ b/Userland/Libraries/LibCore/Stream.h @@ -169,7 +169,7 @@ public: virtual bool is_open() const override; virtual void close() override; virtual ErrorOr seek(i64 offset, SeekMode) override; - virtual ErrorOr truncate(off_t length) override; + virtual ErrorOr truncate(size_t length) override; int leak_fd(Badge<::IPC::File>) {