diff --git a/Userland/Applications/CrashReporter/main.cpp b/Userland/Applications/CrashReporter/main.cpp index 7a89b20535..3f5ce66f19 100644 --- a/Userland/Applications/CrashReporter/main.cpp +++ b/Userland/Applications/CrashReporter/main.cpp @@ -280,7 +280,7 @@ ErrorOr serenity_main(Main::Arguments arguments) return; } - auto file = file_or_error.release_value(); + auto file = file_or_error.release_value().release_stream(); if (auto result = file->write(full_backtrace.to_byte_buffer()); result.is_error()) GUI::MessageBox::show(window, DeprecatedString::formatted("Couldn't save file: {}.", result.release_error()), "Saving backtrace failed"sv, GUI::MessageBox::Type::Error); }; diff --git a/Userland/Libraries/LibFileSystemAccessClient/Client.cpp b/Userland/Libraries/LibFileSystemAccessClient/Client.cpp index 3f6fcbcfd5..49ade60a68 100644 --- a/Userland/Libraries/LibFileSystemAccessClient/Client.cpp +++ b/Userland/Libraries/LibFileSystemAccessClient/Client.cpp @@ -205,9 +205,14 @@ void Client::handle_prompt_end(i32 request_id, i32 error, Optional co return; } - auto file_or_error = Core::Stream::File::adopt_fd(ipc_file->take_fd(), Core::Stream::OpenMode::ReadWrite); + auto file_or_error = [&]() -> ErrorOr { + auto stream = TRY(Core::Stream::File::adopt_fd(ipc_file->take_fd(), Core::Stream::OpenMode::ReadWrite)); + auto filename = TRY(String::from_deprecated_string(*chosen_file)); + return File({}, move(stream), filename); + }(); if (file_or_error.is_error()) { resolve_any_promise(file_or_error.release_error()); + return; } request_data.promise.get>()->resolve(file_or_error.release_value()); diff --git a/Userland/Libraries/LibFileSystemAccessClient/Client.h b/Userland/Libraries/LibFileSystemAccessClient/Client.h index 93e88aa24b..b0c0360f3b 100644 --- a/Userland/Libraries/LibFileSystemAccessClient/Client.h +++ b/Userland/Libraries/LibFileSystemAccessClient/Client.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include #include @@ -18,8 +19,26 @@ namespace FileSystemAccessClient { +class Client; +class File { +public: + File(Badge, NonnullOwnPtr stream, String filename) + : m_stream(move(stream)) + , m_filename(filename) + { + } + + Core::Stream::File& stream() const { return *m_stream; } + NonnullOwnPtr release_stream() { return move(m_stream); } + String filename() const { return m_filename; } + +private: + NonnullOwnPtr m_stream; + String m_filename; +}; + using DeprecatedResult = ErrorOr>; -using Result = ErrorOr>; +using Result = ErrorOr; class Client final : public IPC::ConnectionToServer