diff --git a/Userland/Applications/FileManager/PropertiesWindow.cpp b/Userland/Applications/FileManager/PropertiesWindow.cpp index 49817731ac8..6264f6f6945 100644 --- a/Userland/Applications/FileManager/PropertiesWindow.cpp +++ b/Userland/Applications/FileManager/PropertiesWindow.cpp @@ -246,7 +246,7 @@ ErrorOr PropertiesWindow::create_file_type_specific_tabs(GUI::TabWidget& t return {}; } -ErrorOr PropertiesWindow::create_archive_tab(GUI::TabWidget& tab_widget, NonnullRefPtr mapped_file) +ErrorOr PropertiesWindow::create_archive_tab(GUI::TabWidget& tab_widget, NonnullOwnPtr mapped_file) { auto maybe_zip = Archive::Zip::try_create(mapped_file->bytes()); if (!maybe_zip.has_value()) { @@ -268,7 +268,7 @@ ErrorOr PropertiesWindow::create_archive_tab(GUI::TabWidget& tab_widget, N return {}; } -ErrorOr PropertiesWindow::create_audio_tab(GUI::TabWidget& tab_widget, NonnullRefPtr mapped_file) +ErrorOr PropertiesWindow::create_audio_tab(GUI::TabWidget& tab_widget, NonnullOwnPtr mapped_file) { auto loader_or_error = Audio::Loader::create(mapped_file->bytes()); if (loader_or_error.is_error()) { @@ -317,10 +317,10 @@ struct FontInfo { Format format; NonnullRefPtr typeface; }; -static ErrorOr load_font(StringView path, StringView mime_type, NonnullRefPtr mapped_file) +static ErrorOr load_font(StringView path, StringView mime_type, NonnullOwnPtr mapped_file) { if (path.ends_with(".font"sv)) { - auto font = TRY(Gfx::BitmapFont::try_load_from_mapped_file(mapped_file)); + auto font = TRY(Gfx::BitmapFont::try_load_from_mapped_file(move(mapped_file))); auto typeface = TRY(try_make_ref_counted(font->family(), font->variant())); typeface->add_bitmap_font(move(font)); return FontInfo { FontInfo::Format::BitmapFont, move(typeface) }; @@ -349,9 +349,9 @@ static ErrorOr load_font(StringView path, StringView mime_type, Nonnul return Error::from_string_view("Unrecognized font format."sv); } -ErrorOr PropertiesWindow::create_font_tab(GUI::TabWidget& tab_widget, NonnullRefPtr mapped_file, StringView mime_type) +ErrorOr PropertiesWindow::create_font_tab(GUI::TabWidget& tab_widget, NonnullOwnPtr mapped_file, StringView mime_type) { - auto font_info_or_error = load_font(m_path, mime_type, mapped_file); + auto font_info_or_error = load_font(m_path, mime_type, move(mapped_file)); if (font_info_or_error.is_error()) { warnln("Failed to open '{}': {}", m_path, font_info_or_error.release_error()); return {}; @@ -398,7 +398,7 @@ ErrorOr PropertiesWindow::create_font_tab(GUI::TabWidget& tab_widget, Nonn return {}; } -ErrorOr PropertiesWindow::create_image_tab(GUI::TabWidget& tab_widget, NonnullRefPtr mapped_file, StringView mime_type) +ErrorOr PropertiesWindow::create_image_tab(GUI::TabWidget& tab_widget, NonnullOwnPtr mapped_file, StringView mime_type) { auto image_decoder = Gfx::ImageDecoder::try_create_for_raw_bytes(mapped_file->bytes(), mime_type); if (!image_decoder) @@ -456,7 +456,7 @@ ErrorOr PropertiesWindow::create_image_tab(GUI::TabWidget& tab_widget, Non return {}; } -ErrorOr PropertiesWindow::create_pdf_tab(GUI::TabWidget& tab_widget, NonnullRefPtr mapped_file) +ErrorOr PropertiesWindow::create_pdf_tab(GUI::TabWidget& tab_widget, NonnullOwnPtr mapped_file) { auto maybe_document = PDF::Document::create(mapped_file->bytes()); if (maybe_document.is_error()) { diff --git a/Userland/Applications/FileManager/PropertiesWindow.h b/Userland/Applications/FileManager/PropertiesWindow.h index 1e3f3de9969..cbf54466dbf 100644 --- a/Userland/Applications/FileManager/PropertiesWindow.h +++ b/Userland/Applications/FileManager/PropertiesWindow.h @@ -30,11 +30,11 @@ private: ErrorOr create_widgets(bool disable_rename); ErrorOr create_general_tab(GUI::TabWidget&, bool disable_rename); ErrorOr create_file_type_specific_tabs(GUI::TabWidget&); - ErrorOr create_archive_tab(GUI::TabWidget&, NonnullRefPtr); - ErrorOr create_audio_tab(GUI::TabWidget&, NonnullRefPtr); - ErrorOr create_font_tab(GUI::TabWidget&, NonnullRefPtr, StringView mime_type); - ErrorOr create_image_tab(GUI::TabWidget&, NonnullRefPtr, StringView mime_type); - ErrorOr create_pdf_tab(GUI::TabWidget&, NonnullRefPtr); + ErrorOr create_archive_tab(GUI::TabWidget&, NonnullOwnPtr); + ErrorOr create_audio_tab(GUI::TabWidget&, NonnullOwnPtr); + ErrorOr create_font_tab(GUI::TabWidget&, NonnullOwnPtr, StringView mime_type); + ErrorOr create_image_tab(GUI::TabWidget&, NonnullOwnPtr, StringView mime_type); + ErrorOr create_pdf_tab(GUI::TabWidget&, NonnullOwnPtr); struct PermissionMasks { mode_t read; diff --git a/Userland/Applications/FontEditor/MainWidget.cpp b/Userland/Applications/FontEditor/MainWidget.cpp index ba2a801a2c4..56b016fb349 100644 --- a/Userland/Applications/FontEditor/MainWidget.cpp +++ b/Userland/Applications/FontEditor/MainWidget.cpp @@ -818,7 +818,7 @@ ErrorOr MainWidget::save_file(StringView path, NonnullOwnPtr f ErrorOr MainWidget::open_file(StringView path, NonnullOwnPtr file) { auto mapped_file = TRY(Core::MappedFile::map_from_file(move(file), path)); - auto unmasked_font = TRY(TRY(Gfx::BitmapFont::try_load_from_mapped_file(mapped_file))->unmasked_character_set()); + auto unmasked_font = TRY(TRY(Gfx::BitmapFont::try_load_from_mapped_file(move(mapped_file)))->unmasked_character_set()); TRY(initialize(path, move(unmasked_font))); if (!path.is_empty()) GUI::Application::the()->set_most_recently_open_file(TRY(String::from_utf8(path))); diff --git a/Userland/Applications/Help/ManualModel.h b/Userland/Applications/Help/ManualModel.h index 526e8623ce0..a555cbdfe88 100644 --- a/Userland/Applications/Help/ManualModel.h +++ b/Userland/Applications/Help/ManualModel.h @@ -42,5 +42,5 @@ private: GUI::Icon m_section_open_icon; GUI::Icon m_section_icon; GUI::Icon m_page_icon; - mutable HashMap> m_mapped_files; + mutable HashMap> m_mapped_files; }; diff --git a/Userland/DevTools/Profiler/DisassemblyModel.cpp b/Userland/DevTools/Profiler/DisassemblyModel.cpp index 5b4eab557e8..9d8618bd798 100644 --- a/Userland/DevTools/Profiler/DisassemblyModel.cpp +++ b/Userland/DevTools/Profiler/DisassemblyModel.cpp @@ -29,7 +29,8 @@ static ELF::Image* try_load_kernel_binary() auto kernel_binary_or_error = Core::MappedFile::map("/boot/Kernel"sv); if (!kernel_binary_or_error.is_error()) { auto kernel_binary = kernel_binary_or_error.release_value(); - s_kernel_binary = { { kernel_binary, ELF::Image(kernel_binary->bytes()) } }; + auto image = ELF::Image(kernel_binary->bytes()); + s_kernel_binary = { { move(kernel_binary), image } }; return &s_kernel_binary->elf; } return nullptr; diff --git a/Userland/DevTools/Profiler/Process.h b/Userland/DevTools/Profiler/Process.h index f47f7c5d181..064ca69f2b4 100644 --- a/Userland/DevTools/Profiler/Process.h +++ b/Userland/DevTools/Profiler/Process.h @@ -17,7 +17,7 @@ namespace Profiler { struct MappedObject { - NonnullRefPtr file; + NonnullOwnPtr file; ELF::Image elf; }; diff --git a/Userland/DevTools/Profiler/Profile.cpp b/Userland/DevTools/Profiler/Profile.cpp index 5fddf4abd3e..f665227c153 100644 --- a/Userland/DevTools/Profiler/Profile.cpp +++ b/Userland/DevTools/Profiler/Profile.cpp @@ -280,7 +280,7 @@ ErrorOr> Profile::load_from_perfcore_file(StringView path if (!debuginfo_file_or_error.is_error()) { auto debuginfo_file = debuginfo_file_or_error.release_value(); auto debuginfo_image = ELF::Image(debuginfo_file->bytes()); - g_kernel_debuginfo_object = { { debuginfo_file, move(debuginfo_image) } }; + g_kernel_debuginfo_object = { { move(debuginfo_file), move(debuginfo_image) } }; } } diff --git a/Userland/DevTools/UserspaceEmulator/Emulator.h b/Userland/DevTools/UserspaceEmulator/Emulator.h index f867ea44342..df9f4003ea3 100644 --- a/Userland/DevTools/UserspaceEmulator/Emulator.h +++ b/Userland/DevTools/UserspaceEmulator/Emulator.h @@ -286,7 +286,7 @@ private: Optional m_loader_text_size; struct CachedELF { - NonnullRefPtr mapped_file; + NonnullOwnPtr mapped_file; NonnullOwnPtr debug_info; NonnullOwnPtr image; }; diff --git a/Userland/Libraries/LibCompress/Gzip.cpp b/Userland/Libraries/LibCompress/Gzip.cpp index 5f23560bd7e..89c779aa4ce 100644 --- a/Userland/Libraries/LibCompress/Gzip.cpp +++ b/Userland/Libraries/LibCompress/Gzip.cpp @@ -266,7 +266,7 @@ ErrorOr GzipCompressor::compress_file(StringView input_filename, NonnullOw { // We map the whole file instead of streaming to reduce size overhead (gzip header) and increase the deflate block size (better compression) // TODO: automatically fallback to buffered streaming for very large files - RefPtr file; + OwnPtr file; ReadonlyBytes input_bytes; if (TRY(Core::System::stat(input_filename)).st_size > 0) { diff --git a/Userland/Libraries/LibCore/MappedFile.cpp b/Userland/Libraries/LibCore/MappedFile.cpp index af0b5330622..125d5b0c08d 100644 --- a/Userland/Libraries/LibCore/MappedFile.cpp +++ b/Userland/Libraries/LibCore/MappedFile.cpp @@ -14,18 +14,18 @@ namespace Core { -ErrorOr> MappedFile::map(StringView path) +ErrorOr> MappedFile::map(StringView path) { auto fd = TRY(Core::System::open(path, O_RDONLY | O_CLOEXEC, 0)); return map_from_fd_and_close(fd, path); } -ErrorOr> MappedFile::map_from_file(NonnullOwnPtr stream, StringView path) +ErrorOr> MappedFile::map_from_file(NonnullOwnPtr stream, StringView path) { return map_from_fd_and_close(stream->leak_fd(Badge {}), path); } -ErrorOr> MappedFile::map_from_fd_and_close(int fd, [[maybe_unused]] StringView path) +ErrorOr> MappedFile::map_from_fd_and_close(int fd, [[maybe_unused]] StringView path) { TRY(Core::System::fcntl(fd, F_SETFD, FD_CLOEXEC)); @@ -38,7 +38,7 @@ ErrorOr> MappedFile::map_from_fd_and_close(int fd, [[m auto* ptr = TRY(Core::System::mmap(nullptr, size, PROT_READ, MAP_SHARED, fd, 0, 0, path)); - return adopt_ref(*new MappedFile(ptr, size)); + return adopt_own(*new MappedFile(ptr, size)); } MappedFile::MappedFile(void* ptr, size_t size) diff --git a/Userland/Libraries/LibCore/MappedFile.h b/Userland/Libraries/LibCore/MappedFile.h index 7ad2b709f3b..8372c6e4bda 100644 --- a/Userland/Libraries/LibCore/MappedFile.h +++ b/Userland/Libraries/LibCore/MappedFile.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2018-2021, Andreas Kling + * Copyright (c) 2023, kleines Filmröllchen * * SPDX-License-Identifier: BSD-2-Clause */ @@ -8,20 +9,20 @@ #include #include -#include +#include #include #include namespace Core { -class MappedFile : public RefCounted { +class MappedFile { AK_MAKE_NONCOPYABLE(MappedFile); AK_MAKE_NONMOVABLE(MappedFile); public: - static ErrorOr> map(StringView path); - static ErrorOr> map_from_file(NonnullOwnPtr, StringView path); - static ErrorOr> map_from_fd_and_close(int fd, StringView path); + static ErrorOr> map(StringView path); + static ErrorOr> map_from_file(NonnullOwnPtr, StringView path); + static ErrorOr> map_from_fd_and_close(int fd, StringView path); ~MappedFile(); void* data() { return m_data; } @@ -38,4 +39,18 @@ private: size_t m_size { 0 }; }; +class SharedMappedFile : public RefCounted { +public: + explicit SharedMappedFile(NonnullOwnPtr file) + : m_file(move(file)) + { + } + + MappedFile const& operator->() const { return *m_file; } + MappedFile& operator->() { return *m_file; } + +private: + NonnullOwnPtr m_file; +}; + } diff --git a/Userland/Libraries/LibCoredump/Backtrace.h b/Userland/Libraries/LibCoredump/Backtrace.h index 9ce037f3c5f..598cecccec2 100644 --- a/Userland/Libraries/LibCoredump/Backtrace.h +++ b/Userland/Libraries/LibCoredump/Backtrace.h @@ -15,14 +15,14 @@ namespace Coredump { struct ELFObjectInfo { - ELFObjectInfo(NonnullRefPtr file, NonnullOwnPtr&& debug_info, NonnullOwnPtr image) + ELFObjectInfo(NonnullOwnPtr file, NonnullOwnPtr&& debug_info, NonnullOwnPtr image) : file(move(file)) , debug_info(move(debug_info)) , image(move(image)) { } - NonnullRefPtr file; + NonnullOwnPtr file; NonnullOwnPtr debug_info; NonnullOwnPtr image; }; diff --git a/Userland/Libraries/LibCoredump/Inspector.cpp b/Userland/Libraries/LibCoredump/Inspector.cpp index b5cae587a26..bad065ab632 100644 --- a/Userland/Libraries/LibCoredump/Inspector.cpp +++ b/Userland/Libraries/LibCoredump/Inspector.cpp @@ -47,7 +47,7 @@ void Inspector::parse_loaded_libraries(Function on_progress) auto image = make(file_or_error.value()->bytes()); auto debug_info = make(*image, DeprecatedString {}, library.base_address); - m_loaded_libraries.append(make(library.name, file_or_error.value(), move(image), move(debug_info), library.base_address)); + m_loaded_libraries.append(make(library.name, file_or_error.release_value(), move(image), move(debug_info), library.base_address)); }); } diff --git a/Userland/Libraries/LibCoredump/Reader.cpp b/Userland/Libraries/LibCoredump/Reader.cpp index e071f472ad7..42ffb597ac8 100644 --- a/Userland/Libraries/LibCoredump/Reader.cpp +++ b/Userland/Libraries/LibCoredump/Reader.cpp @@ -43,7 +43,7 @@ Reader::Reader(ByteBuffer buffer) m_coredump_buffer = move(buffer); } -Reader::Reader(NonnullRefPtr file) +Reader::Reader(NonnullOwnPtr file) : Reader(file->bytes()) { m_mapped_file = move(file); diff --git a/Userland/Libraries/LibCoredump/Reader.h b/Userland/Libraries/LibCoredump/Reader.h index e8a754bd5f7..959c8f8c74e 100644 --- a/Userland/Libraries/LibCoredump/Reader.h +++ b/Userland/Libraries/LibCoredump/Reader.h @@ -66,7 +66,7 @@ public: struct LibraryData { DeprecatedString name; FlatPtr base_address { 0 }; - NonnullRefPtr file; + NonnullOwnPtr file; ELF::Image lib_elf; }; LibraryData const* library_containing(FlatPtr address) const; @@ -83,7 +83,7 @@ public: private: explicit Reader(ReadonlyBytes); explicit Reader(ByteBuffer); - explicit Reader(NonnullRefPtr); + explicit Reader(NonnullOwnPtr); static Optional decompress_coredump(ReadonlyBytes); @@ -108,7 +108,7 @@ private: const JsonObject process_info() const; // For uncompressed coredumps, we keep the MappedFile - RefPtr m_mapped_file; + OwnPtr m_mapped_file; // For compressed coredumps, we decompress them into a ByteBuffer ByteBuffer m_coredump_buffer; diff --git a/Userland/Libraries/LibDebug/LoadedLibrary.h b/Userland/Libraries/LibDebug/LoadedLibrary.h index 47580b00c13..658b31b435e 100644 --- a/Userland/Libraries/LibDebug/LoadedLibrary.h +++ b/Userland/Libraries/LibDebug/LoadedLibrary.h @@ -14,12 +14,12 @@ namespace Debug { struct LoadedLibrary { DeprecatedString name; - NonnullRefPtr file; + NonnullOwnPtr file; NonnullOwnPtr image; NonnullOwnPtr debug_info; FlatPtr base_address {}; - LoadedLibrary(DeprecatedString const& name, NonnullRefPtr file, NonnullOwnPtr image, NonnullOwnPtr&& debug_info, FlatPtr base_address) + LoadedLibrary(DeprecatedString const& name, NonnullOwnPtr file, NonnullOwnPtr image, NonnullOwnPtr&& debug_info, FlatPtr base_address) : name(name) , file(move(file)) , image(move(image)) diff --git a/Userland/Libraries/LibGfx/Font/BitmapFont.cpp b/Userland/Libraries/LibGfx/Font/BitmapFont.cpp index 4aae9858d33..28ae2f04347 100644 --- a/Userland/Libraries/LibGfx/Font/BitmapFont.cpp +++ b/Userland/Libraries/LibGfx/Font/BitmapFont.cpp @@ -239,10 +239,10 @@ ErrorOr> BitmapFont::try_load_from_file(DeprecatedStri return try_load_from_mapped_file(move(mapped_file)); } -ErrorOr> BitmapFont::try_load_from_mapped_file(RefPtr const& mapped_file) +ErrorOr> BitmapFont::try_load_from_mapped_file(OwnPtr mapped_file) { auto font = TRY(load_from_memory((u8 const*)mapped_file->data())); - font->m_mapped_file = mapped_file; + font->m_mapped_file = move(mapped_file); return font; } diff --git a/Userland/Libraries/LibGfx/Font/BitmapFont.h b/Userland/Libraries/LibGfx/Font/BitmapFont.h index 8f7c5e22e1f..fba06b3308f 100644 --- a/Userland/Libraries/LibGfx/Font/BitmapFont.h +++ b/Userland/Libraries/LibGfx/Font/BitmapFont.h @@ -32,7 +32,7 @@ public: static RefPtr load_from_file(DeprecatedString const& path); static ErrorOr> try_load_from_file(DeprecatedString const& path); - static ErrorOr> try_load_from_mapped_file(RefPtr const&); + static ErrorOr> try_load_from_mapped_file(OwnPtr); ErrorOr write_to_file(DeprecatedString const& path); ErrorOr write_to_file(NonnullOwnPtr file); @@ -156,7 +156,7 @@ private: u8* m_rows { nullptr }; u8* m_glyph_widths { nullptr }; - RefPtr m_mapped_file; + OwnPtr m_mapped_file; u8 m_glyph_width { 0 }; u8 m_glyph_height { 0 }; diff --git a/Userland/Libraries/LibGfx/Font/OpenType/Font.h b/Userland/Libraries/LibGfx/Font/OpenType/Font.h index fb0a32ab20b..b2b7f4cd671 100644 --- a/Userland/Libraries/LibGfx/Font/OpenType/Font.h +++ b/Userland/Libraries/LibGfx/Font/OpenType/Font.h @@ -107,7 +107,7 @@ private: { } - RefPtr m_mapped_file; + OwnPtr m_mapped_file; ReadonlyBytes m_buffer; diff --git a/Userland/Libraries/LibPCIDB/Database.h b/Userland/Libraries/LibPCIDB/Database.h index 9353578bcfd..fbc714b1ef8 100644 --- a/Userland/Libraries/LibPCIDB/Database.h +++ b/Userland/Libraries/LibPCIDB/Database.h @@ -64,7 +64,7 @@ public: const StringView get_programming_interface(u8 class_id, u8 subclass_id, u8 programming_interface_id) const; private: - explicit Database(NonnullRefPtr file) + explicit Database(NonnullOwnPtr file) : m_file(move(file)) { } @@ -77,7 +77,7 @@ private: ClassMode, }; - NonnullRefPtr m_file; + NonnullOwnPtr m_file; StringView m_view {}; HashMap> m_vendors; HashMap> m_classes; diff --git a/Userland/Libraries/LibSymbolication/Symbolication.cpp b/Userland/Libraries/LibSymbolication/Symbolication.cpp index 29afeb7ed0d..d2c0cff7656 100644 --- a/Userland/Libraries/LibSymbolication/Symbolication.cpp +++ b/Userland/Libraries/LibSymbolication/Symbolication.cpp @@ -19,7 +19,7 @@ namespace Symbolication { struct CachedELF { - NonnullRefPtr mapped_file; + NonnullOwnPtr mapped_file; NonnullOwnPtr debug_info; NonnullOwnPtr image; }; diff --git a/Userland/Libraries/LibUSBDB/Database.h b/Userland/Libraries/LibUSBDB/Database.h index 5f0e297df01..b0028fb83ae 100644 --- a/Userland/Libraries/LibUSBDB/Database.h +++ b/Userland/Libraries/LibUSBDB/Database.h @@ -63,7 +63,7 @@ public: const StringView get_protocol(u8 class_id, u8 subclass_id, u8 protocol_id) const; private: - explicit Database(NonnullRefPtr file) + explicit Database(NonnullOwnPtr file) : m_file(move(file)) { } @@ -76,7 +76,7 @@ private: ClassMode, }; - NonnullRefPtr m_file; + NonnullOwnPtr m_file; StringView m_view {}; HashMap> m_vendors; HashMap> m_classes; diff --git a/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.cpp b/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.cpp index c2b873031b7..a45a9cb74c8 100644 --- a/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.cpp +++ b/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.cpp @@ -14,7 +14,7 @@ DecoderErrorOr> MatroskaDemuxer::from_file(String return make(TRY(Reader::from_file(filename))); } -DecoderErrorOr> MatroskaDemuxer::from_mapped_file(NonnullRefPtr mapped_file) +DecoderErrorOr> MatroskaDemuxer::from_mapped_file(NonnullOwnPtr mapped_file) { return make(TRY(Reader::from_mapped_file(move(mapped_file)))); } diff --git a/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.h b/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.h index 225ebed06fc..59bd151a278 100644 --- a/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.h +++ b/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.h @@ -18,7 +18,7 @@ public: // FIXME: We should instead accept some abstract data streaming type so that the demuxer // can work with non-contiguous data. static DecoderErrorOr> from_file(StringView filename); - static DecoderErrorOr> from_mapped_file(NonnullRefPtr mapped_file); + static DecoderErrorOr> from_mapped_file(NonnullOwnPtr mapped_file); static DecoderErrorOr> from_data(ReadonlyBytes data); diff --git a/Userland/Libraries/LibVideo/Containers/Matroska/Reader.cpp b/Userland/Libraries/LibVideo/Containers/Matroska/Reader.cpp index 9d6ca54a18d..e5091ee2d3e 100644 --- a/Userland/Libraries/LibVideo/Containers/Matroska/Reader.cpp +++ b/Userland/Libraries/LibVideo/Containers/Matroska/Reader.cpp @@ -86,13 +86,13 @@ constexpr u32 CUE_REFERENCE_ID = 0xDB; DecoderErrorOr Reader::from_file(StringView path) { auto mapped_file = DECODER_TRY(DecoderErrorCategory::IO, Core::MappedFile::map(path)); - return from_mapped_file(mapped_file); + return from_mapped_file(move(mapped_file)); } -DecoderErrorOr Reader::from_mapped_file(NonnullRefPtr mapped_file) +DecoderErrorOr Reader::from_mapped_file(NonnullOwnPtr mapped_file) { auto reader = TRY(from_data(mapped_file->bytes())); - reader.m_mapped_file = move(mapped_file); + reader.m_mapped_file = make_ref_counted(move(mapped_file)); return reader; } diff --git a/Userland/Libraries/LibVideo/Containers/Matroska/Reader.h b/Userland/Libraries/LibVideo/Containers/Matroska/Reader.h index 80cf336e43e..6c7e352adee 100644 --- a/Userland/Libraries/LibVideo/Containers/Matroska/Reader.h +++ b/Userland/Libraries/LibVideo/Containers/Matroska/Reader.h @@ -25,7 +25,7 @@ public: typedef Function(TrackEntry const&)> TrackEntryCallback; static DecoderErrorOr from_file(StringView path); - static DecoderErrorOr from_mapped_file(NonnullRefPtr mapped_file); + static DecoderErrorOr from_mapped_file(NonnullOwnPtr mapped_file); static DecoderErrorOr from_data(ReadonlyBytes data); @@ -60,7 +60,7 @@ private: DecoderErrorOr ensure_cues_are_parsed(); DecoderErrorOr seek_to_cue_for_timestamp(SampleIterator&, Duration const&); - RefPtr m_mapped_file; + RefPtr m_mapped_file; ReadonlyBytes m_data; Optional m_header; @@ -89,7 +89,7 @@ public: private: friend class Reader; - SampleIterator(RefPtr file, ReadonlyBytes data, TrackEntry track, u64 timestamp_scale, size_t position) + SampleIterator(RefPtr file, ReadonlyBytes data, TrackEntry track, u64 timestamp_scale, size_t position) : m_file(move(file)) , m_data(data) , m_track(move(track)) @@ -100,7 +100,7 @@ private: DecoderErrorOr seek_to_cue_point(CuePoint const& cue_point); - RefPtr m_file; + RefPtr m_file; ReadonlyBytes m_data; TrackEntry m_track; u64 m_segment_timestamp_scale { 0 }; diff --git a/Userland/Libraries/LibVideo/PlaybackManager.cpp b/Userland/Libraries/LibVideo/PlaybackManager.cpp index 45524d33082..8ef34ef3f8f 100644 --- a/Userland/Libraries/LibVideo/PlaybackManager.cpp +++ b/Userland/Libraries/LibVideo/PlaybackManager.cpp @@ -31,7 +31,7 @@ DecoderErrorOr> PlaybackManager::from_file(String return create(move(demuxer)); } -DecoderErrorOr> PlaybackManager::from_mapped_file(NonnullRefPtr mapped_file) +DecoderErrorOr> PlaybackManager::from_mapped_file(NonnullOwnPtr mapped_file) { auto demuxer = TRY(Matroska::MatroskaDemuxer::from_mapped_file(move(mapped_file))); return create(move(demuxer)); diff --git a/Userland/Libraries/LibVideo/PlaybackManager.h b/Userland/Libraries/LibVideo/PlaybackManager.h index b35d770b6c9..f3a5bf7a941 100644 --- a/Userland/Libraries/LibVideo/PlaybackManager.h +++ b/Userland/Libraries/LibVideo/PlaybackManager.h @@ -112,7 +112,7 @@ public: static constexpr SeekMode DEFAULT_SEEK_MODE = SeekMode::Accurate; static DecoderErrorOr> from_file(StringView file); - static DecoderErrorOr> from_mapped_file(NonnullRefPtr file); + static DecoderErrorOr> from_mapped_file(NonnullOwnPtr file); static DecoderErrorOr> from_data(ReadonlyBytes data); diff --git a/Userland/Utilities/disasm.cpp b/Userland/Utilities/disasm.cpp index a8985bd7448..1b00c6aa349 100644 --- a/Userland/Utilities/disasm.cpp +++ b/Userland/Utilities/disasm.cpp @@ -29,7 +29,7 @@ ErrorOr serenity_main(Main::Arguments args) args_parser.add_positional_argument(path, "Path to i386 binary file", "path"); args_parser.parse(args); - RefPtr file; + OwnPtr file; u8 const* asm_data = nullptr; size_t asm_size = 0; if ((TRY(Core::System::stat(path))).st_size > 0) { diff --git a/Userland/Utilities/fdtdump.cpp b/Userland/Utilities/fdtdump.cpp index 481bd448a3f..b49e869ca8e 100644 --- a/Userland/Utilities/fdtdump.cpp +++ b/Userland/Utilities/fdtdump.cpp @@ -31,7 +31,7 @@ ErrorOr serenity_main(Main::Arguments arguments) } auto const* fdt_header = reinterpret_cast(file->data()); - auto bytes = ReadonlyBytes { file->data(), file->size() }; + auto bytes = file->bytes(); TRY(DeviceTree::dump(*fdt_header, bytes)); diff --git a/Userland/Utilities/image.cpp b/Userland/Utilities/image.cpp index 4af25a94dda..7fc97e2eb68 100644 --- a/Userland/Utilities/image.cpp +++ b/Userland/Utilities/image.cpp @@ -116,7 +116,7 @@ ErrorOr serenity_main(Main::Arguments arguments) Optional icc_data = TRY(decoder->icc_data()); - RefPtr icc_file; + OwnPtr icc_file; if (!assign_color_profile_path.is_empty()) { icc_file = TRY(Core::MappedFile::map(assign_color_profile_path)); icc_data = icc_file->bytes(); @@ -128,7 +128,7 @@ ErrorOr serenity_main(Main::Arguments arguments) return 1; } - auto source_icc_file = icc_file; + auto source_icc_file = move(icc_file); auto source_icc_data = icc_data.value(); icc_file = TRY(Core::MappedFile::map(convert_color_profile_path)); icc_data = icc_file->bytes(); diff --git a/Userland/Utilities/unzip.cpp b/Userland/Utilities/unzip.cpp index 49964413448..440ba687bf6 100644 --- a/Userland/Utilities/unzip.cpp +++ b/Userland/Utilities/unzip.cpp @@ -122,7 +122,7 @@ ErrorOr serenity_main(Main::Arguments arguments) // FIXME: Map file chunk-by-chunk once we have mmap() with offset. // This will require mapping some parts then unmapping them repeatedly, // but it would be significantly faster and less syscall heavy than seek()/read() at every read. - RefPtr mapped_file; + OwnPtr mapped_file; ReadonlyBytes input_bytes; if (st.st_size > 0) { mapped_file = TRY(Core::MappedFile::map(zip_file_path));