diff --git a/Userland/Applications/HexEditor/HexEditor.cpp b/Userland/Applications/HexEditor/HexEditor.cpp index d27c7f9cd7..addf4047fe 100644 --- a/Userland/Applications/HexEditor/HexEditor.cpp +++ b/Userland/Applications/HexEditor/HexEditor.cpp @@ -49,14 +49,9 @@ HexEditor::HexEditor() m_blink_timer->start(); } -bool HexEditor::open_new_file(size_t size) +ErrorOr HexEditor::open_new_file(size_t size) { - auto maybe_buffer = ByteBuffer::create_zeroed(size); - if (maybe_buffer.is_error()) { - return false; - } - - m_document = make(maybe_buffer.release_value()); + m_document = make(TRY(ByteBuffer::create_zeroed(size))); set_content_length(m_document->size()); m_position = 0; m_cursor_at_low_nibble = false; @@ -66,7 +61,7 @@ bool HexEditor::open_new_file(size_t size) update(); update_status(); - return true; + return {}; } void HexEditor::open_file(NonnullRefPtr file) diff --git a/Userland/Applications/HexEditor/HexEditor.h b/Userland/Applications/HexEditor/HexEditor.h index 233a251e73..aafef92d00 100644 --- a/Userland/Applications/HexEditor/HexEditor.h +++ b/Userland/Applications/HexEditor/HexEditor.h @@ -33,7 +33,7 @@ public: virtual ~HexEditor() override = default; size_t buffer_size() const { return m_document->size(); } - bool open_new_file(size_t size); + ErrorOr open_new_file(size_t size); void open_file(NonnullRefPtr file); void fill_selection(u8 fill_byte); Optional get_byte(size_t position); diff --git a/Userland/Applications/HexEditor/HexEditorWidget.cpp b/Userland/Applications/HexEditor/HexEditorWidget.cpp index d04abf1313..16b88d02fa 100644 --- a/Userland/Applications/HexEditor/HexEditorWidget.cpp +++ b/Userland/Applications/HexEditor/HexEditorWidget.cpp @@ -95,17 +95,19 @@ HexEditorWidget::HexEditorWidget() m_new_action = GUI::Action::create("New", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png"sv).release_value_but_fixme_should_propagate_errors(), [this](const GUI::Action&) { String value; if (request_close() && GUI::InputBox::show(window(), value, "Enter new file size:"sv, "New file size"sv) == GUI::InputBox::ExecResult::OK && !value.is_empty()) { - auto file_size = value.to_int(); - if (file_size.has_value() && file_size.value() > 0) { - window()->set_modified(false); - if (!m_editor->open_new_file(file_size.value())) { - GUI::MessageBox::show(window(), "Entered file size is too large."sv, "Error"sv, GUI::MessageBox::Type::Error); - return; - } - set_path({}); - } else { + auto file_size = value.to_uint(); + if (!file_size.has_value()) { GUI::MessageBox::show(window(), "Invalid file size entered."sv, "Error"sv, GUI::MessageBox::Type::Error); + return; } + + if (auto error = m_editor->open_new_file(file_size.value()); error.is_error()) { + GUI::MessageBox::show(window(), String::formatted("Unable to open new file: {}"sv, error.error()), "Error"sv, GUI::MessageBox::Type::Error); + return; + } + + set_path({}); + window()->set_modified(false); } });