Browse Source

HexEditor: Propagate errors when using "Save"

Lucas CHOLLET 2 years ago
parent
commit
a2dca2b762

+ 4 - 3
Userland/Applications/HexEditor/HexDocument.cpp

@@ -83,15 +83,16 @@ HexDocumentFile::HexDocumentFile(NonnullOwnPtr<Core::Stream::File> file)
 {
 {
 }
 }
 
 
-void HexDocumentFile::write_to_file()
+ErrorOr<void> HexDocumentFile::write_to_file()
 {
 {
     for (auto& change : m_changes) {
     for (auto& change : m_changes) {
-        m_file->seek(change.key, SeekMode::SetPosition).release_value_but_fixme_should_propagate_errors();
-        m_file->write({ &change.value, 1 }).release_value_but_fixme_should_propagate_errors();
+        TRY(m_file->seek(change.key, SeekMode::SetPosition));
+        TRY(m_file->write({ &change.value, 1 }));
     }
     }
     clear_changes();
     clear_changes();
     // make sure the next get operation triggers a read
     // make sure the next get operation triggers a read
     m_buffer_file_pos = m_file_size + 1;
     m_buffer_file_pos = m_file_size + 1;
+    return {};
 }
 }
 
 
 ErrorOr<void> HexDocumentFile::write_to_file(Core::Stream::File& file)
 ErrorOr<void> HexDocumentFile::write_to_file(Core::Stream::File& file)

+ 1 - 1
Userland/Applications/HexEditor/HexDocument.h

@@ -66,7 +66,7 @@ public:
 
 
     void set_file(NonnullOwnPtr<Core::Stream::File> file);
     void set_file(NonnullOwnPtr<Core::Stream::File> file);
     NonnullOwnPtr<Core::Stream::File> const& file() const;
     NonnullOwnPtr<Core::Stream::File> const& file() const;
-    void write_to_file();
+    ErrorOr<void> write_to_file();
     ErrorOr<void> write_to_file(Core::Stream::File& file);
     ErrorOr<void> write_to_file(Core::Stream::File& file);
     Cell get(size_t position) override;
     Cell get(size_t position) override;
     u8 get_unchanged(size_t position) override;
     u8 get_unchanged(size_t position) override;

+ 5 - 6
Userland/Applications/HexEditor/HexEditor.cpp

@@ -153,14 +153,13 @@ ErrorOr<void> HexEditor::save_as(NonnullOwnPtr<Core::Stream::File> new_file)
     return {};
     return {};
 }
 }
 
 
-bool HexEditor::save()
+ErrorOr<void> HexEditor::save()
 {
 {
-    if (m_document->type() != HexDocument::Type::File) {
-        return false;
-    }
+    if (m_document->type() != HexDocument::Type::File)
+        return Error::from_string_literal("Unable to save from a memory document");
 
 
-    static_cast<HexDocumentFile*>(m_document.ptr())->write_to_file();
-    return true;
+    TRY(static_cast<HexDocumentFile*>(m_document.ptr())->write_to_file());
+    return {};
 }
 }
 
 
 size_t HexEditor::selection_size()
 size_t HexEditor::selection_size()

+ 1 - 1
Userland/Applications/HexEditor/HexEditor.h

@@ -39,7 +39,7 @@ public:
     ErrorOr<void> fill_selection(u8 fill_byte);
     ErrorOr<void> fill_selection(u8 fill_byte);
     Optional<u8> get_byte(size_t position);
     Optional<u8> get_byte(size_t position);
     ErrorOr<void> save_as(NonnullOwnPtr<Core::Stream::File>);
     ErrorOr<void> save_as(NonnullOwnPtr<Core::Stream::File>);
-    bool save();
+    ErrorOr<void> save();
 
 
     bool undo();
     bool undo();
     bool redo();
     bool redo();

+ 2 - 2
Userland/Applications/HexEditor/HexEditorWidget.cpp

@@ -132,8 +132,8 @@ HexEditorWidget::HexEditorWidget()
         if (m_path.is_empty())
         if (m_path.is_empty())
             return m_save_as_action->activate();
             return m_save_as_action->activate();
 
 
-        if (!m_editor->save()) {
-            GUI::MessageBox::show(window(), "Unable to save file.\n"sv, "Error"sv, GUI::MessageBox::Type::Error);
+        if (auto result = m_editor->save(); result.is_error()) {
+            GUI::MessageBox::show(window(), DeprecatedString::formatted("Unable to save file: {}\n"sv, result.error()), "Error"sv, GUI::MessageBox::Type::Error);
         } else {
         } else {
             window()->set_modified(false);
             window()->set_modified(false);
             m_editor->update();
             m_editor->update();