Everywhere: Remove needless copies of Error / ErrorOr instances

Either take the underlying objects with release_* methods or move() the
instances around.
This commit is contained in:
Timothy Flynn 2023-02-09 13:26:53 -05:00 committed by Linus Groh
parent 52687814ea
commit 4a916cd379
28 changed files with 69 additions and 77 deletions

View file

@ -238,12 +238,12 @@ private:
auto result = stream().read(fillable_slice); auto result = stream().read(fillable_slice);
if (result.is_error()) { if (result.is_error()) {
if (!result.error().is_errno()) if (!result.error().is_errno())
return result.error(); return result.release_error();
if (result.error().code() == EINTR) if (result.error().code() == EINTR)
continue; continue;
if (result.error().code() == EAGAIN) if (result.error().code() == EAGAIN)
break; break;
return result.error(); return result.release_error();
} }
auto const filled_slice = result.value(); auto const filled_slice = result.value();
VERIFY(m_buffer.write(filled_slice) == filled_slice.size()); VERIFY(m_buffer.write(filled_slice) == filled_slice.size());

View file

@ -137,7 +137,7 @@ ErrorOr<void> Access::add_host_controller_and_scan_for_devices(NonnullOwnPtr<Hos
m_host_controllers.get(domain_number).value()->enumerate_attached_devices([&](EnumerableDeviceIdentifier const& device_identifier) -> IterationDecision { m_host_controllers.get(domain_number).value()->enumerate_attached_devices([&](EnumerableDeviceIdentifier const& device_identifier) -> IterationDecision {
auto device_identifier_or_error = DeviceIdentifier::from_enumerable_identifier(device_identifier); auto device_identifier_or_error = DeviceIdentifier::from_enumerable_identifier(device_identifier);
if (device_identifier_or_error.is_error()) { if (device_identifier_or_error.is_error()) {
error_or_void = device_identifier_or_error.error(); error_or_void = device_identifier_or_error.release_error();
return IterationDecision::Break; return IterationDecision::Break;
} }
m_device_identifiers.append(device_identifier_or_error.release_value()); m_device_identifiers.append(device_identifier_or_error.release_value());
@ -167,7 +167,7 @@ UNMAP_AFTER_INIT void Access::rescan_hardware()
(*it).value->enumerate_attached_devices([this, &error_or_void](EnumerableDeviceIdentifier device_identifier) -> IterationDecision { (*it).value->enumerate_attached_devices([this, &error_or_void](EnumerableDeviceIdentifier device_identifier) -> IterationDecision {
auto device_identifier_or_error = DeviceIdentifier::from_enumerable_identifier(device_identifier); auto device_identifier_or_error = DeviceIdentifier::from_enumerable_identifier(device_identifier);
if (device_identifier_or_error.is_error()) { if (device_identifier_or_error.is_error()) {
error_or_void = device_identifier_or_error.error(); error_or_void = device_identifier_or_error.release_error();
return IterationDecision::Break; return IterationDecision::Break;
} }
m_device_identifiers.append(device_identifier_or_error.release_value()); m_device_identifiers.append(device_identifier_or_error.release_value());

View file

@ -403,7 +403,7 @@ ErrorOr<size_t> IPv4Socket::recvfrom(OpenFileDescription& description, UserOrKer
nreceived = receive_packet_buffered(description, offset_buffer, offset_buffer_length, flags, user_addr, user_addr_length, packet_timestamp, blocking); nreceived = receive_packet_buffered(description, offset_buffer, offset_buffer_length, flags, user_addr, user_addr_length, packet_timestamp, blocking);
if (nreceived.is_error()) if (nreceived.is_error())
total_nreceived = nreceived; total_nreceived = move(nreceived);
else else
total_nreceived.value() += nreceived.value(); total_nreceived.value() += nreceived.value();
} while ((flags & MSG_WAITALL) && !total_nreceived.is_error() && total_nreceived.value() < buffer_length); } while ((flags & MSG_WAITALL) && !total_nreceived.is_error() && total_nreceived.value() < buffer_length);

View file

@ -22,7 +22,7 @@ PerformanceEventBuffer::PerformanceEventBuffer(NonnullOwnPtr<KBuffer> buffer)
{ {
} }
NEVER_INLINE ErrorOr<void> PerformanceEventBuffer::append(int type, FlatPtr arg1, FlatPtr arg2, StringView arg3, Thread* current_thread, FlatPtr arg4, u64 arg5, ErrorOr<FlatPtr> arg6) NEVER_INLINE ErrorOr<void> PerformanceEventBuffer::append(int type, FlatPtr arg1, FlatPtr arg2, StringView arg3, Thread* current_thread, FlatPtr arg4, u64 arg5, ErrorOr<FlatPtr> const& arg6)
{ {
FlatPtr base_pointer = (FlatPtr)__builtin_frame_address(0); FlatPtr base_pointer = (FlatPtr)__builtin_frame_address(0);
return append_with_ip_and_bp(current_thread->pid(), current_thread->tid(), 0, base_pointer, type, 0, arg1, arg2, arg3, arg4, arg5, arg6); return append_with_ip_and_bp(current_thread->pid(), current_thread->tid(), 0, base_pointer, type, 0, arg1, arg2, arg3, arg4, arg5, arg6);
@ -66,13 +66,13 @@ static Vector<FlatPtr, PerformanceEvent::max_stack_frame_count> raw_backtrace(Fl
} }
ErrorOr<void> PerformanceEventBuffer::append_with_ip_and_bp(ProcessID pid, ThreadID tid, RegisterState const& regs, ErrorOr<void> PerformanceEventBuffer::append_with_ip_and_bp(ProcessID pid, ThreadID tid, RegisterState const& regs,
int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3, FlatPtr arg4, u64 arg5, ErrorOr<FlatPtr> arg6) int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3, FlatPtr arg4, u64 arg5, ErrorOr<FlatPtr> const& arg6)
{ {
return append_with_ip_and_bp(pid, tid, regs.ip(), regs.bp(), type, lost_samples, arg1, arg2, arg3, arg4, arg5, arg6); return append_with_ip_and_bp(pid, tid, regs.ip(), regs.bp(), type, lost_samples, arg1, arg2, arg3, arg4, arg5, arg6);
} }
ErrorOr<void> PerformanceEventBuffer::append_with_ip_and_bp(ProcessID pid, ThreadID tid, ErrorOr<void> PerformanceEventBuffer::append_with_ip_and_bp(ProcessID pid, ThreadID tid,
FlatPtr ip, FlatPtr bp, int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3, FlatPtr arg4, u64 arg5, ErrorOr<FlatPtr> arg6) FlatPtr ip, FlatPtr bp, int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3, FlatPtr arg4, u64 arg5, ErrorOr<FlatPtr> const& arg6)
{ {
if (count() >= capacity()) if (count() >= capacity())
return ENOBUFS; return ENOBUFS;

View file

@ -110,11 +110,11 @@ class PerformanceEventBuffer {
public: public:
static OwnPtr<PerformanceEventBuffer> try_create_with_size(size_t buffer_size); static OwnPtr<PerformanceEventBuffer> try_create_with_size(size_t buffer_size);
ErrorOr<void> append(int type, FlatPtr arg1, FlatPtr arg2, StringView arg3, Thread* current_thread = Thread::current(), FlatPtr arg4 = 0, u64 arg5 = 0, ErrorOr<FlatPtr> arg6 = 0); ErrorOr<void> append(int type, FlatPtr arg1, FlatPtr arg2, StringView arg3, Thread* current_thread = Thread::current(), FlatPtr arg4 = 0, u64 arg5 = 0, ErrorOr<FlatPtr> const& arg6 = 0);
ErrorOr<void> append_with_ip_and_bp(ProcessID pid, ThreadID tid, FlatPtr eip, FlatPtr ebp, ErrorOr<void> append_with_ip_and_bp(ProcessID pid, ThreadID tid, FlatPtr eip, FlatPtr ebp,
int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3, FlatPtr arg4 = 0, u64 arg5 = {}, ErrorOr<FlatPtr> arg6 = 0); int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3, FlatPtr arg4 = 0, u64 arg5 = {}, ErrorOr<FlatPtr> const& arg6 = 0);
ErrorOr<void> append_with_ip_and_bp(ProcessID pid, ThreadID tid, RegisterState const& regs, ErrorOr<void> append_with_ip_and_bp(ProcessID pid, ThreadID tid, RegisterState const& regs,
int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3, FlatPtr arg4 = 0, u64 arg5 = {}, ErrorOr<FlatPtr> arg6 = 0); int type, u32 lost_samples, FlatPtr arg1, FlatPtr arg2, StringView arg3, FlatPtr arg4 = 0, u64 arg5 = {}, ErrorOr<FlatPtr> const& arg6 = 0);
void clear() void clear()
{ {

View file

@ -127,7 +127,7 @@ public:
} }
} }
static void add_read_event(Thread& thread, int fd, size_t size, OpenFileDescription const& file_description, u64 start_timestamp, ErrorOr<FlatPtr> result) static void add_read_event(Thread& thread, int fd, size_t size, OpenFileDescription const& file_description, u64 start_timestamp, ErrorOr<FlatPtr> const& result)
{ {
if (thread.is_profiling_suppressed()) if (thread.is_profiling_suppressed())
return; return;

View file

@ -74,7 +74,7 @@ ErrorOr<FlatPtr> Process::sys$readv(int fd, Userspace<const struct iovec*> iov,
ErrorOr<FlatPtr> Process::sys$read(int fd, Userspace<u8*> buffer, size_t size) ErrorOr<FlatPtr> Process::sys$read(int fd, Userspace<u8*> buffer, size_t size)
{ {
auto const start_timestamp = TimeManagement::the().uptime_ms(); auto const start_timestamp = TimeManagement::the().uptime_ms();
auto const result = read_impl(fd, buffer, size); auto result = read_impl(fd, buffer, size);
if (Thread::current()->is_profiling_suppressed()) if (Thread::current()->is_profiling_suppressed())
return result; return result;

View file

@ -101,9 +101,9 @@ ErrorOr<void> MainWidget::create_actions()
new_font_wizard->hide(); new_font_wizard->hide();
auto maybe_font = new_font_wizard->create_font(); auto maybe_font = new_font_wizard->create_font();
if (maybe_font.is_error()) if (maybe_font.is_error())
return show_error(maybe_font.error(), "Creating new font failed"sv); return show_error(maybe_font.release_error(), "Creating new font failed"sv);
if (auto result = initialize({}, move(maybe_font.value())); result.is_error()) if (auto result = initialize({}, move(maybe_font.value())); result.is_error())
show_error(result.error(), "Initializing new font failed"sv); show_error(result.release_error(), "Initializing new font failed"sv);
}); });
m_new_action->set_status_tip("Create a new font"); m_new_action->set_status_tip("Create a new font");
@ -114,14 +114,14 @@ ErrorOr<void> MainWidget::create_actions()
if (!open_path.has_value()) if (!open_path.has_value())
return; return;
if (auto result = open_file(open_path.value()); result.is_error()) if (auto result = open_file(open_path.value()); result.is_error())
show_error(result.error(), "Opening"sv, LexicalPath { open_path.value() }.basename()); show_error(result.release_error(), "Opening"sv, LexicalPath { open_path.value() }.basename());
}); });
m_save_action = GUI::CommonActions::make_save_action([&](auto&) { m_save_action = GUI::CommonActions::make_save_action([&](auto&) {
if (m_path.is_empty()) if (m_path.is_empty())
return m_save_as_action->activate(); return m_save_as_action->activate();
if (auto result = save_file(m_path); result.is_error()) if (auto result = save_file(m_path); result.is_error())
show_error(result.error(), "Saving"sv, LexicalPath { m_path }.basename()); show_error(result.release_error(), "Saving"sv, LexicalPath { m_path }.basename());
}); });
m_save_as_action = GUI::CommonActions::make_save_as_action([&](auto&) { m_save_as_action = GUI::CommonActions::make_save_as_action([&](auto&) {
@ -130,17 +130,17 @@ ErrorOr<void> MainWidget::create_actions()
if (!save_path.has_value()) if (!save_path.has_value())
return; return;
if (auto result = save_file(save_path.value()); result.is_error()) if (auto result = save_file(save_path.value()); result.is_error())
show_error(result.error(), "Saving"sv, lexical_path.basename()); show_error(result.release_error(), "Saving"sv, lexical_path.basename());
}); });
m_cut_action = GUI::CommonActions::make_cut_action([&](auto&) { m_cut_action = GUI::CommonActions::make_cut_action([&](auto&) {
if (auto result = cut_selected_glyphs(); result.is_error()) if (auto result = cut_selected_glyphs(); result.is_error())
show_error(result.error(), "Cutting selection failed"sv); show_error(result.release_error(), "Cutting selection failed"sv);
}); });
m_copy_action = GUI::CommonActions::make_copy_action([&](auto&) { m_copy_action = GUI::CommonActions::make_copy_action([&](auto&) {
if (auto result = copy_selected_glyphs(); result.is_error()) if (auto result = copy_selected_glyphs(); result.is_error())
show_error(result.error(), "Copying selection failed"sv); show_error(result.release_error(), "Copying selection failed"sv);
}); });
m_paste_action = GUI::CommonActions::make_paste_action([&](auto&) { m_paste_action = GUI::CommonActions::make_paste_action([&](auto&) {
@ -178,7 +178,7 @@ ErrorOr<void> MainWidget::create_actions()
m_open_preview_action = GUI::Action::create("&Preview Font", { Mod_Ctrl, Key_P }, TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/find.png"sv)), [&](auto&) { m_open_preview_action = GUI::Action::create("&Preview Font", { Mod_Ctrl, Key_P }, TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/find.png"sv)), [&](auto&) {
if (!m_font_preview_window) { if (!m_font_preview_window) {
if (auto maybe_window = create_preview_window(); maybe_window.is_error()) if (auto maybe_window = create_preview_window(); maybe_window.is_error())
show_error(maybe_window.error(), "Creating preview window failed"sv); show_error(maybe_window.release_error(), "Creating preview window failed"sv);
else else
m_font_preview_window = maybe_window.release_value(); m_font_preview_window = maybe_window.release_value();
} }
@ -792,12 +792,12 @@ void MainWidget::push_undo()
{ {
auto maybe_state = m_undo_selection->save_state(); auto maybe_state = m_undo_selection->save_state();
if (maybe_state.is_error()) if (maybe_state.is_error())
return show_error(maybe_state.error(), "Saving undo state failed"sv); return show_error(maybe_state.release_error(), "Saving undo state failed"sv);
auto maybe_command = try_make<SelectionUndoCommand>(*m_undo_selection, move(maybe_state.value())); auto maybe_command = try_make<SelectionUndoCommand>(*m_undo_selection, move(maybe_state.value()));
if (maybe_command.is_error()) if (maybe_command.is_error())
return show_error(maybe_command.error(), "Making undo command failed"sv); return show_error(maybe_command.release_error(), "Making undo command failed"sv);
if (auto maybe_push = m_undo_stack->try_push(move(maybe_command.value())); maybe_push.is_error()) if (auto maybe_push = m_undo_stack->try_push(move(maybe_command.value())); maybe_push.is_error())
show_error(maybe_push.error(), "Pushing undo stack failed"sv); show_error(maybe_push.release_error(), "Pushing undo stack failed"sv);
} }
void MainWidget::reset_selection_and_push_undo() void MainWidget::reset_selection_and_push_undo()
@ -976,7 +976,7 @@ void MainWidget::drop_event(GUI::DropEvent& event)
return; return;
if (auto result = open_file(urls.first().path()); result.is_error()) if (auto result = open_file(urls.first().path()); result.is_error())
show_error(result.error(), "Opening"sv, LexicalPath { urls.first().path() }.basename()); show_error(result.release_error(), "Opening"sv, LexicalPath { urls.first().path() }.basename());
} }
} }

View file

@ -27,9 +27,8 @@ bool KeyboardMapperWidget::request_close()
return true; return true;
auto result = GUI::MessageBox::ask_about_unsaved_changes(window(), m_filename); auto result = GUI::MessageBox::ask_about_unsaved_changes(window(), m_filename);
if (result == GUI::MessageBox::ExecResult::Yes) { if (result == GUI::MessageBox::ExecResult::Yes) {
ErrorOr<void> error_or = save(); if (auto error_or = save(); error_or.is_error())
if (error_or.is_error()) show_error_to_user(error_or.release_error());
show_error_to_user(error_or.error());
if (!window()->is_modified()) if (!window()->is_modified())
return true; return true;

View file

@ -54,16 +54,14 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
if (!path.has_value()) if (!path.has_value())
return; return;
ErrorOr<void> error_or = keyboard_mapper_widget->load_map_from_file(path.value()); if (auto error_or = keyboard_mapper_widget->load_map_from_file(path.value()); error_or.is_error())
if (error_or.is_error()) keyboard_mapper_widget->show_error_to_user(error_or.release_error());
keyboard_mapper_widget->show_error_to_user(error_or.error());
}); });
auto save_action = GUI::CommonActions::make_save_action( auto save_action = GUI::CommonActions::make_save_action(
[&](auto&) { [&](auto&) {
ErrorOr<void> error_or = keyboard_mapper_widget->save(); if (auto error_or = keyboard_mapper_widget->save(); error_or.is_error())
if (error_or.is_error()) keyboard_mapper_widget->show_error_to_user(error_or.release_error());
keyboard_mapper_widget->show_error_to_user(error_or.error());
}); });
auto save_as_action = GUI::CommonActions::make_save_as_action([&](auto&) { auto save_as_action = GUI::CommonActions::make_save_as_action([&](auto&) {
@ -72,9 +70,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
if (!save_path.has_value()) if (!save_path.has_value())
return; return;
ErrorOr<void> error_or = keyboard_mapper_widget->save_to_file(save_path.value()); if (auto error_or = keyboard_mapper_widget->save_to_file(save_path.value()); error_or.is_error())
if (error_or.is_error()) keyboard_mapper_widget->show_error_to_user(error_or.release_error());
keyboard_mapper_widget->show_error_to_user(error_or.error());
}); });
auto quit_action = GUI::CommonActions::make_quit_action( auto quit_action = GUI::CommonActions::make_quit_action(

View file

@ -1021,8 +1021,8 @@ ErrorOr<NonnullRefPtr<GUI::Action>> HackStudioWidget::create_debug_action()
return; return;
} }
Debugger::the().set_child_setup_callback([this, ptm_res]() { Debugger::the().set_child_setup_callback([this, ptm_res = ptm_res.release_value()]() {
return m_terminal_wrapper->setup_slave_pseudoterminal(ptm_res.value()); return m_terminal_wrapper->setup_slave_pseudoterminal(ptm_res);
}); });
m_debugger_thread = Threading::Thread::construct(Debugger::start_static); m_debugger_thread = Threading::Thread::construct(Debugger::start_static);
@ -1789,7 +1789,7 @@ ErrorOr<NonnullRefPtr<GUI::Action>> HackStudioWidget::create_open_project_config
auto maybe_error = Core::System::mkdir(LexicalPath::absolute_path(m_project->root_path(), parent_directory), 0755); auto maybe_error = Core::System::mkdir(LexicalPath::absolute_path(m_project->root_path(), parent_directory), 0755);
if (maybe_error.is_error() && maybe_error.error().code() != EEXIST) if (maybe_error.is_error() && maybe_error.error().code() != EEXIST)
return maybe_error.error(); return maybe_error.release_error();
auto file = TRY(Core::Stream::File::open(absolute_config_file_path, Core::Stream::OpenMode::Write)); auto file = TRY(Core::Stream::File::open(absolute_config_file_path, Core::Stream::OpenMode::Write));
TRY(file->write_entire_buffer( TRY(file->write_entire_buffer(

View file

@ -47,7 +47,7 @@ ErrorOr<NonnullRefPtr<ConfigFile>> ConfigFile::open(DeprecatedString const& file
// the same as if we had opened an empty file. This behavior is a little weird, but is required by // the same as if we had opened an empty file. This behavior is a little weird, but is required by
// user code, which does not check the config file exists before opening. // user code, which does not check the config file exists before opening.
if (!(allow_altering == AllowWriting::No && maybe_file.error().code() == ENOENT)) if (!(allow_altering == AllowWriting::No && maybe_file.error().code() == ENOENT))
return maybe_file.error(); return maybe_file.release_error();
} else { } else {
buffered_file = TRY(Stream::BufferedFile::create(maybe_file.release_value())); buffered_file = TRY(Stream::BufferedFile::create(maybe_file.release_value()));
} }

View file

@ -531,7 +531,7 @@ ErrorOr<void, File::CopyError> File::copy_directory(DeprecatedString const& dst_
DeprecatedString::formatted("{}/{}", src_path, filename), DeprecatedString::formatted("{}/{}", src_path, filename),
RecursionMode::Allowed, link, AddDuplicateFileMarker::Yes, preserve_mode); RecursionMode::Allowed, link, AddDuplicateFileMarker::Yes, preserve_mode);
if (result.is_error()) if (result.is_error())
return result.error(); return result.release_error();
} }
auto my_umask = umask(0); auto my_umask = umask(0);

View file

@ -71,13 +71,13 @@ public:
auto tag_or_error = peek(); auto tag_or_error = peek();
if (tag_or_error.is_error()) { if (tag_or_error.is_error()) {
m_stack = move(previous_position); m_stack = move(previous_position);
return tag_or_error.error(); return tag_or_error.release_error();
} }
auto length_or_error = read_length(); auto length_or_error = read_length();
if (length_or_error.is_error()) { if (length_or_error.is_error()) {
m_stack = move(previous_position); m_stack = move(previous_position);
return length_or_error.error(); return length_or_error.release_error();
} }
auto length = length_or_error.value(); auto length = length_or_error.value();
@ -85,7 +85,7 @@ public:
auto bytes_result = read_bytes(length); auto bytes_result = read_bytes(length);
if (bytes_result.is_error()) { if (bytes_result.is_error()) {
m_stack = move(previous_position); m_stack = move(previous_position);
return bytes_result.error(); return bytes_result.release_error();
} }
m_current_tag.clear(); m_current_tag.clear();
@ -106,13 +106,13 @@ public:
auto tag_or_error = peek(); auto tag_or_error = peek();
if (tag_or_error.is_error()) { if (tag_or_error.is_error()) {
m_stack = move(previous_position); m_stack = move(previous_position);
return tag_or_error.error(); return tag_or_error.release_error();
} }
auto length_or_error = read_length(); auto length_or_error = read_length();
if (length_or_error.is_error()) { if (length_or_error.is_error()) {
m_stack = move(previous_position); m_stack = move(previous_position);
return length_or_error.error(); return length_or_error.release_error();
} }
auto tag = tag_or_error.value(); auto tag = tag_or_error.value();
@ -121,7 +121,7 @@ public:
auto value_or_error = read_value<ValueType>(class_override.value_or(tag.class_), kind_override.value_or(tag.kind), length); auto value_or_error = read_value<ValueType>(class_override.value_or(tag.class_), kind_override.value_or(tag.kind), length);
if (value_or_error.is_error()) { if (value_or_error.is_error()) {
m_stack = move(previous_position); m_stack = move(previous_position);
return value_or_error.error(); return value_or_error.release_error();
} }
m_current_tag.clear(); m_current_tag.clear();
@ -146,7 +146,7 @@ private:
ErrorOr<ValueType> with_type_check(ErrorOr<DecodedType>&& value_or_error) ErrorOr<ValueType> with_type_check(ErrorOr<DecodedType>&& value_or_error)
{ {
if (value_or_error.is_error()) if (value_or_error.is_error())
return value_or_error.error(); return value_or_error.release_error();
if constexpr (IsSame<ValueType, bool> && !IsSame<DecodedType, bool>) { if constexpr (IsSame<ValueType, bool> && !IsSame<DecodedType, bool>) {
return Error::from_string_literal("ASN1::Decoder: Trying to decode a boolean from a non-boolean type"); return Error::from_string_literal("ASN1::Decoder: Trying to decode a boolean from a non-boolean type");
@ -162,10 +162,7 @@ private:
template<typename ValueType> template<typename ValueType>
ErrorOr<ValueType> read_value(Class klass, Kind kind, size_t length) ErrorOr<ValueType> read_value(Class klass, Kind kind, size_t length)
{ {
auto data_or_error = read_bytes(length); auto data = TRY(read_bytes(length));
if (data_or_error.is_error())
return data_or_error.error();
auto data = data_or_error.value();
if (klass != Class::Universal) if (klass != Class::Universal)
return with_type_check<ValueType>(data); return with_type_check<ValueType>(data);

View file

@ -907,14 +907,14 @@ ErrorOr<IterationDecision> Parser::for_each_detailed_timing(Function<IterationDe
}); });
if (result.is_error()) { if (result.is_error()) {
dbgln("Failed to iterate DTDs in CEA861 extension block: {}", result.error()); dbgln("Failed to iterate DTDs in CEA861 extension block: {}", result.error());
extension_error = result.error(); extension_error = result.release_error();
return IterationDecision::Break; return IterationDecision::Break;
} }
return result.value(); return result.value();
})); }));
if (extension_error.has_value()) if (extension_error.has_value())
return extension_error.value(); return extension_error.release_value();
return result; return result;
} }
@ -948,7 +948,7 @@ ErrorOr<IterationDecision> Parser::for_each_short_video_descriptor(Function<Iter
return callback(block_id, is_native, vic); return callback(block_id, is_native, vic);
}); });
if (result.is_error()) { if (result.is_error()) {
extension_error = result.error(); extension_error = result.release_error();
return IterationDecision::Break; return IterationDecision::Break;
} }
return result.value(); return result.value();
@ -985,14 +985,14 @@ ErrorOr<IterationDecision> Parser::for_each_display_descriptor(Function<Iteratio
}); });
if (result.is_error()) { if (result.is_error()) {
dbgln("Failed to iterate display descriptors in CEA861 extension block: {}", result.error()); dbgln("Failed to iterate display descriptors in CEA861 extension block: {}", result.error());
extension_error = result.error(); extension_error = result.release_error();
return IterationDecision::Break; return IterationDecision::Break;
} }
return result.value(); return result.value();
})); }));
if (extension_error.has_value()) if (extension_error.has_value())
return extension_error.value(); return extension_error.release_value();
return result; return result;
} }

View file

@ -65,7 +65,7 @@ ErrorOr<void> Program::link(GPU::Device& device)
if (linked_vertex_shader_or_error.is_error()) { if (linked_vertex_shader_or_error.is_error()) {
m_link_status = false; m_link_status = false;
m_info_log = linker.messages(); m_info_log = linker.messages();
return linked_vertex_shader_or_error.error(); return linked_vertex_shader_or_error.release_error();
} }
m_linked_vertex_shader = linked_vertex_shader_or_error.release_value(); m_linked_vertex_shader = linked_vertex_shader_or_error.release_value();
@ -81,7 +81,7 @@ ErrorOr<void> Program::link(GPU::Device& device)
if (linked_fragment_shader_or_error.is_error()) { if (linked_fragment_shader_or_error.is_error()) {
m_link_status = false; m_link_status = false;
m_info_log = linker.messages(); m_info_log = linker.messages();
return linked_fragment_shader_or_error.error(); return linked_fragment_shader_or_error.release_error();
} }
m_linked_fragment_shader = linked_fragment_shader_or_error.release_value(); m_linked_fragment_shader = linked_fragment_shader_or_error.release_value();

View file

@ -33,7 +33,7 @@ ErrorOr<void> Shader::compile()
if (object_file_or_error.is_error()) { if (object_file_or_error.is_error()) {
m_compile_status = false; m_compile_status = false;
m_info_log = compiler.messages(); m_info_log = compiler.messages();
return object_file_or_error.error(); return object_file_or_error.release_error();
} }
m_object_file = object_file_or_error.release_value(); m_object_file = object_file_or_error.release_value();

View file

@ -53,7 +53,7 @@ ErrorOr<void> Heap::open()
if (file_size > 0) { if (file_size > 0) {
if (auto error_maybe = read_zero_block(); error_maybe.is_error()) { if (auto error_maybe = read_zero_block(); error_maybe.is_error()) {
m_file = nullptr; m_file = nullptr;
return error_maybe.error(); return error_maybe.release_error();
} }
} else { } else {
initialize_zero_block(); initialize_zero_block();

View file

@ -85,7 +85,7 @@ void PlaybackManager::dispatch_fatal_error(Error error)
// FIXME: For threading, this will have to use a pre-allocated event to send to the main loop // FIXME: For threading, this will have to use a pre-allocated event to send to the main loop
// to be able to gracefully handle OOM. // to be able to gracefully handle OOM.
VERIFY(&m_main_loop == &Core::EventLoop::current()); VERIFY(&m_main_loop == &Core::EventLoop::current());
FatalPlaybackErrorEvent event { error }; FatalPlaybackErrorEvent event { move(error) };
m_event_handler.dispatch_event(event); m_event_handler.dispatch_event(event);
} }

View file

@ -247,11 +247,11 @@ class FatalPlaybackErrorEvent : public Core::Event {
public: public:
explicit FatalPlaybackErrorEvent(Error error) explicit FatalPlaybackErrorEvent(Error error)
: Core::Event(FatalPlaybackError) : Core::Event(FatalPlaybackError)
, m_error(error) , m_error(move(error))
{ {
} }
virtual ~FatalPlaybackErrorEvent() = default; virtual ~FatalPlaybackErrorEvent() = default;
Error error() { return m_error; } Error const& error() { return m_error; }
private: private:
Error m_error; Error m_error;

View file

@ -172,7 +172,7 @@ void ResourceLoader::load(LoadRequest& request, Function<void(ReadonlyBytes, Has
dbgln("ResourceLoader: Finished load of: \"{}\", Duration: {}ms", url_for_logging, load_time_ms); dbgln("ResourceLoader: Finished load of: \"{}\", Duration: {}ms", url_for_logging, load_time_ms);
}; };
auto const log_failure = [url_for_logging, id](auto const& request, auto const error_message) { auto const log_failure = [url_for_logging, id](auto const& request, auto const& error_message) {
auto load_time_ms = request.load_time().to_milliseconds(); auto load_time_ms = request.load_time().to_milliseconds();
emit_signpost(DeprecatedString::formatted("Failed load: {}", url_for_logging), id); emit_signpost(DeprecatedString::formatted("Failed load: {}", url_for_logging), id);
dbgln("ResourceLoader: Failed load of: \"{}\", \033[31;1mError: {}\033[0m, Duration: {}ms", url_for_logging, error_message, load_time_ms); dbgln("ResourceLoader: Failed load of: \"{}\", \033[31;1mError: {}\033[0m, Duration: {}ms", url_for_logging, error_message, load_time_ms);

View file

@ -243,7 +243,7 @@ ErrorOr<int> execute_work_items(Vector<WorkItem> const& items)
if (auto result = destination_file->write(bytes_read); result.is_error()) { if (auto result = destination_file->write(bytes_read); result.is_error()) {
// FIXME: Return the formatted string directly. There is no way to do this right now without the temporary going out of scope and being destroyed. // FIXME: Return the formatted string directly. There is no way to do this right now without the temporary going out of scope and being destroyed.
report_warning(DeprecatedString::formatted("Failed to write to destination file: {}", result.error())); report_warning(DeprecatedString::formatted("Failed to write to destination file: {}", result.error()));
return result.error(); return result.release_error();
} }
item_done += bytes_read.size(); item_done += bytes_read.size();
executed_work_bytes += bytes_read.size(); executed_work_bytes += bytes_read.size();

View file

@ -238,8 +238,8 @@ public:
void request_file(Web::FileRequest request) override void request_file(Web::FileRequest request) override
{ {
auto const file = Core::System::open(request.path(), O_RDONLY); auto file = Core::System::open(request.path(), O_RDONLY);
request.on_file_request_finish(file); request.on_file_request_finish(move(file));
} }
private: private:

View file

@ -65,10 +65,9 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
// Verify that all specified keymaps are loadable // Verify that all specified keymaps are loadable
for (auto& keymap_name : mappings_vector) { for (auto& keymap_name : mappings_vector) {
auto keymap = Keyboard::CharacterMap::load_from_file(keymap_name); if (auto keymap = Keyboard::CharacterMap::load_from_file(keymap_name); keymap.is_error()) {
if (keymap.is_error()) {
warnln("Cannot load keymap {}: {}({})", keymap_name, keymap.error().string_literal(), keymap.error().code()); warnln("Cannot load keymap {}: {}({})", keymap_name, keymap.error().string_literal(), keymap.error().code());
return keymap.error(); return keymap.release_error();
} }
} }

View file

@ -33,7 +33,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
auto stat = Core::System::lstat(path); auto stat = Core::System::lstat(path);
if (stat.is_error() && stat.error().code() != ENOENT) if (stat.is_error() && stat.error().code() != ENOENT)
return stat.error(); return stat.release_error();
if (!stat.is_error() && S_ISDIR(stat.value().st_mode)) { if (!stat.is_error() && S_ISDIR(stat.value().st_mode)) {
// The target path is a directory, so we presumably want <path>/<filename> as the effective path. // The target path is a directory, so we presumably want <path>/<filename> as the effective path.

View file

@ -46,7 +46,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
auto result = Core::File::remove(path, recursive ? Core::File::RecursionMode::Allowed : Core::File::RecursionMode::Disallowed); auto result = Core::File::remove(path, recursive ? Core::File::RecursionMode::Allowed : Core::File::RecursionMode::Disallowed);
if (result.is_error()) { if (result.is_error()) {
auto error = result.error(); auto error = result.release_error();
if (force && error.is_errno() && error.code() == ENOENT) if (force && error.is_errno() && error.code() == ENOENT)
continue; continue;

View file

@ -110,7 +110,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
if (event.type == Core::FileWatcherEvent::Type::ContentModified) { if (event.type == Core::FileWatcherEvent::Type::ContentModified) {
auto buffer_or_error = f->read_until_eof(); auto buffer_or_error = f->read_until_eof();
if (buffer_or_error.is_error()) { if (buffer_or_error.is_error()) {
auto error = buffer_or_error.error(); auto error = buffer_or_error.release_error();
warnln(error.string_literal()); warnln(error.string_literal());
event_loop.quit(error.code()); event_loop.quit(error.code());
return; return;
@ -120,7 +120,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
auto potential_error = f->seek(0, SeekMode::FromEndPosition); auto potential_error = f->seek(0, SeekMode::FromEndPosition);
if (potential_error.is_error()) { if (potential_error.is_error()) {
auto error = potential_error.error(); auto error = potential_error.release_error();
warnln(error.string_literal()); warnln(error.string_literal());
event_loop.quit(error.code()); event_loop.quit(error.code());
return; return;

View file

@ -181,7 +181,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
auto result_or_error = Core::System::mkdir(absolute_path, header_mode); auto result_or_error = Core::System::mkdir(absolute_path, header_mode);
if (result_or_error.is_error() && result_or_error.error().code() != EEXIST) if (result_or_error.is_error() && result_or_error.error().code() != EEXIST)
return result_or_error.error(); return result_or_error.release_error();
break; break;
} }
default: default: