Skip to content

Commit 4ffecee

Browse files
committed
floptool.cpp, image_handler.cpp: Add rudimentary error checking to floppy_create; allow mount to return nullptr on failure
1 parent e57289c commit 4ffecee

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

src/tools/floptool.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,10 @@ static int flopcreate(int argc, char *argv[])
291291
image_handler ih;
292292
ih.set_on_disk_path(argv[4]);
293293

294-
ih.floppy_create(*create_fs, meta);
294+
if(ih.floppy_create(*create_fs, meta)) {
295+
fprintf(stderr, "Error: Floppy creation failed for format '%s'\n", create_fs->m_manager->name());
296+
return 1;
297+
}
295298
return ih.floppy_save(*dest_format);
296299
}
297300

src/tools/image_handler.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,19 +282,21 @@ bool image_handler::floppy_save(const floppy_format_info &format) const
282282
return !format.m_format->save(*io, variants, m_floppy_image);
283283
}
284284

285-
void image_handler::floppy_create(const floppy_create_info &format, fs::meta_data meta)
285+
bool image_handler::floppy_create(const floppy_create_info &format, fs::meta_data meta)
286286
{
287287
if(format.m_type) {
288288
std::vector<uint32_t> variants;
289289
std::vector<u8> img(format.m_image_size);
290290
fs::fsblk_vec_t blockdev(img);
291291
auto fs = format.m_manager->mount(blockdev);
292-
fs->format(meta);
292+
if(!fs || fs->format(meta))
293+
return false;
293294

294295
auto io = util::ram_read(img.data(), img.size(), 0xff);
295-
format.m_type->load(*io, floppy_image::FF_UNKNOWN, variants, m_floppy_image);
296+
return !format.m_type->load(*io, floppy_image::FF_UNKNOWN, variants, m_floppy_image);
296297
} else {
297298
fs::unformatted_image::format(format.m_key, &m_floppy_image);
299+
return true;
298300
}
299301
}
300302

@@ -327,6 +329,11 @@ bool image_handler::floppy_mount_fs(const filesystem_format &format)
327329
m_fsblk.reset(new fs::fsblk_vec_t(m_sector_image));
328330
m_fsm = format.m_manager;
329331
m_fs = m_fsm->mount(*m_fsblk);
332+
if(!m_fs) {
333+
m_fsblk.reset();
334+
m_sector_image.clear();
335+
return true;
336+
}
330337
return false;
331338
}
332339

@@ -338,6 +345,11 @@ bool image_handler::hd_mount_fs(const filesystem_format &format)
338345
m_fsblk.reset(new fs::fsblk_vec_t(m_sector_image));
339346
m_fsm = format.m_manager;
340347
m_fs = m_fsm->mount(*m_fsblk);
348+
if(!m_fs) {
349+
m_fsblk.reset();
350+
m_sector_image.clear();
351+
return true;
352+
}
341353
return false;
342354
}
343355

src/tools/image_handler.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class image_handler {
8787
bool floppy_load(const floppy_format_info &format);
8888
bool floppy_save(const floppy_format_info &format) const;
8989

90-
void floppy_create(const floppy_create_info &format, fs::meta_data meta);
90+
bool floppy_create(const floppy_create_info &format, fs::meta_data meta);
9191
bool floppy_mount_fs(const filesystem_format &format);
9292
bool hd_mount_fs(const filesystem_format &format);
9393
void fs_to_floppy();

0 commit comments

Comments
 (0)