diff --git a/Userland/Libraries/LibArchive/TarStream.cpp b/Userland/Libraries/LibArchive/TarStream.cpp index 3a967d3ea6b..f7b5d5ebde2 100644 --- a/Userland/Libraries/LibArchive/TarStream.cpp +++ b/Userland/Libraries/LibArchive/TarStream.cpp @@ -137,8 +137,8 @@ TarFileStream TarInputStream::file_contents() return TarFileStream(*this); } -TarOutputStream::TarOutputStream(OutputStream& stream) - : m_stream(stream) +TarOutputStream::TarOutputStream(Core::Stream::Handle stream) + : m_stream(move(stream)) { } @@ -153,9 +153,9 @@ void TarOutputStream::add_directory(DeprecatedString const& path, mode_t mode) header.set_magic(gnu_magic); header.set_version(gnu_version); header.calculate_checksum(); - VERIFY(m_stream.write_or_error(Bytes { &header, sizeof(header) })); + MUST(m_stream->write_entire_buffer(Bytes { &header, sizeof(header) })); u8 padding[block_size] = { 0 }; - VERIFY(m_stream.write_or_error(Bytes { &padding, block_size - sizeof(header) })); + MUST(m_stream->write_entire_buffer(Bytes { &padding, block_size - sizeof(header) })); } void TarOutputStream::add_file(DeprecatedString const& path, mode_t mode, ReadonlyBytes bytes) @@ -169,14 +169,14 @@ void TarOutputStream::add_file(DeprecatedString const& path, mode_t mode, Readon header.set_magic(gnu_magic); header.set_version(gnu_version); header.calculate_checksum(); - VERIFY(m_stream.write_or_error(ReadonlyBytes { &header, sizeof(header) })); + MUST(m_stream->write_entire_buffer(ReadonlyBytes { &header, sizeof(header) })); constexpr Array padding { 0 }; - VERIFY(m_stream.write_or_error(ReadonlyBytes { &padding, block_size - sizeof(header) })); + MUST(m_stream->write_entire_buffer(ReadonlyBytes { &padding, block_size - sizeof(header) })); size_t n_written = 0; while (n_written < bytes.size()) { - n_written += m_stream.write(bytes.slice(n_written, min(bytes.size() - n_written, block_size))); + n_written += MUST(m_stream->write(bytes.slice(n_written, min(bytes.size() - n_written, block_size)))); } - VERIFY(m_stream.write_or_error(ReadonlyBytes { &padding, block_size - (n_written % block_size) })); + MUST(m_stream->write_entire_buffer(ReadonlyBytes { &padding, block_size - (n_written % block_size) })); } void TarOutputStream::add_link(DeprecatedString const& path, mode_t mode, StringView link_name) @@ -191,17 +191,18 @@ void TarOutputStream::add_link(DeprecatedString const& path, mode_t mode, String header.set_version(gnu_version); header.set_link_name(link_name); header.calculate_checksum(); - VERIFY(m_stream.write_or_error(Bytes { &header, sizeof(header) })); + MUST(m_stream->write_entire_buffer(Bytes { &header, sizeof(header) })); u8 padding[block_size] = { 0 }; - VERIFY(m_stream.write_or_error(Bytes { &padding, block_size - sizeof(header) })); + MUST(m_stream->write_entire_buffer(Bytes { &padding, block_size - sizeof(header) })); } void TarOutputStream::finish() { VERIFY(!m_finished); constexpr Array padding { 0 }; - m_stream.write_or_error(ReadonlyBytes { &padding, block_size }); // 2 empty records that are used to signify the end of the archive - m_stream.write_or_error(ReadonlyBytes { &padding, block_size }); + // 2 empty records that are used to signify the end of the archive. + MUST(m_stream->write_entire_buffer(ReadonlyBytes { &padding, block_size })); + MUST(m_stream->write_entire_buffer(ReadonlyBytes { &padding, block_size })); m_finished = true; } diff --git a/Userland/Libraries/LibArchive/TarStream.h b/Userland/Libraries/LibArchive/TarStream.h index 0f967807b24..5d62d0d19a0 100644 --- a/Userland/Libraries/LibArchive/TarStream.h +++ b/Userland/Libraries/LibArchive/TarStream.h @@ -58,14 +58,14 @@ private: class TarOutputStream { public: - TarOutputStream(OutputStream&); + TarOutputStream(Core::Stream::Handle); void add_file(DeprecatedString const& path, mode_t, ReadonlyBytes); void add_link(DeprecatedString const& path, mode_t, StringView); void add_directory(DeprecatedString const& path, mode_t); void finish(); private: - OutputStream& m_stream; + Core::Stream::Handle m_stream; bool m_finished { false }; friend class TarFileStream; diff --git a/Userland/Utilities/tar.cpp b/Userland/Utilities/tar.cpp index 6e0aebdf83e..f1527670d5c 100644 --- a/Userland/Utilities/tar.cpp +++ b/Userland/Utilities/tar.cpp @@ -215,12 +215,10 @@ ErrorOr serenity_main(Main::Arguments arguments) if (!directory.is_empty()) TRY(Core::System::chdir(directory)); - Core::OutputFileStream file_stream(file); - Compress::GzipCompressor gzip_stream(file_stream); + NonnullOwnPtr file_output_stream = make(file); + NonnullOwnPtr gzip_output_stream = make(*file_output_stream); - OutputStream& file_output_stream = file_stream; - OutputStream& gzip_output_stream = gzip_stream; - Archive::TarOutputStream tar_stream((gzip) ? gzip_output_stream : file_output_stream); + Archive::TarOutputStream tar_stream(make(move((gzip) ? gzip_output_stream : file_output_stream))); auto add_file = [&](DeprecatedString path) -> ErrorOr { auto file = Core::File::construct(path);