summaryrefslogtreecommitdiffstatshomepage
path: root/src/tools/image_handler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/image_handler.cpp')
-rw-r--r--src/tools/image_handler.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/tools/image_handler.cpp b/src/tools/image_handler.cpp
index 14976516e1c..a6323ec5988 100644
--- a/src/tools/image_handler.cpp
+++ b/src/tools/image_handler.cpp
@@ -282,19 +282,21 @@ bool image_handler::floppy_save(const floppy_format_info &format) const
return !format.m_format->save(*io, variants, m_floppy_image);
}
-void image_handler::floppy_create(const floppy_create_info &format, fs::meta_data meta)
+bool image_handler::floppy_create(const floppy_create_info &format, fs::meta_data meta)
{
if(format.m_type) {
std::vector<uint32_t> variants;
std::vector<u8> img(format.m_image_size);
fs::fsblk_vec_t blockdev(img);
auto fs = format.m_manager->mount(blockdev);
- fs->format(meta);
+ if(!fs || fs->format(meta))
+ return false;
auto io = util::ram_read(img.data(), img.size(), 0xff);
- format.m_type->load(*io, floppy_image::FF_UNKNOWN, variants, m_floppy_image);
+ return !format.m_type->load(*io, floppy_image::FF_UNKNOWN, variants, m_floppy_image);
} else {
fs::unformatted_image::format(format.m_key, &m_floppy_image);
+ return true;
}
}
@@ -327,6 +329,11 @@ bool image_handler::floppy_mount_fs(const filesystem_format &format)
m_fsblk.reset(new fs::fsblk_vec_t(m_sector_image));
m_fsm = format.m_manager;
m_fs = m_fsm->mount(*m_fsblk);
+ if(!m_fs) {
+ m_fsblk.reset();
+ m_sector_image.clear();
+ return true;
+ }
return false;
}
@@ -338,6 +345,11 @@ bool image_handler::hd_mount_fs(const filesystem_format &format)
m_fsblk.reset(new fs::fsblk_vec_t(m_sector_image));
m_fsm = format.m_manager;
m_fs = m_fsm->mount(*m_fsblk);
+ if(!m_fs) {
+ m_fsblk.reset();
+ m_sector_image.clear();
+ return true;
+ }
return false;
}