summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/imagedev/harddriv.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/imagedev/harddriv.cpp')
-rw-r--r--src/devices/imagedev/harddriv.cpp63
1 files changed, 37 insertions, 26 deletions
diff --git a/src/devices/imagedev/harddriv.cpp b/src/devices/imagedev/harddriv.cpp
index 2d7933919fa..078131fca6b 100644
--- a/src/devices/imagedev/harddriv.cpp
+++ b/src/devices/imagedev/harddriv.cpp
@@ -38,7 +38,7 @@ static char const *const hd_option_spec =
// device type definition
-DEFINE_DEVICE_TYPE(HARDDISK, harddisk_image_device, "harddisk_image", "Harddisk")
+DEFINE_DEVICE_TYPE(HARDDISK, harddisk_image_device, "harddisk_image", "Hard disk")
//-------------------------------------------------
// harddisk_image_base_device - constructor
@@ -287,48 +287,59 @@ std::error_condition harddisk_image_device::internal_load_hd()
if (m_chd)
{
// open the hard disk file
- m_hard_disk_handle.reset(new hard_disk_file(m_chd));
- if (m_hard_disk_handle)
- return std::error_condition();
+ try
+ {
+ m_hard_disk_handle.reset(new hard_disk_file(m_chd));
+ if (m_hard_disk_handle)
+ return std::error_condition();
+ }
+ catch (...)
+ {
+ err = image_error::INVALIDIMAGE;
+ }
+ }
+ else if (!is_open())
+ {
+ err = image_error::UNSPECIFIED;
}
else
{
- if (is_open())
- {
- uint32_t skip = 0;
+ uint32_t skip = 0;
- // check for 2MG format
- if (!memcmp(header, "2IMG", 4))
+ if (!memcmp(header, "2IMG", 4)) // check for 2MG format
+ {
+ skip = get_u32le(&header[0x18]);
+ osd_printf_verbose("harddriv: detected 2MG, creator is %c%c%c%c, data at %08x\n", header[4], header[5], header[6], header[7], skip);
+ }
+ else if (is_filetype("hdi")) // check for HDI format
+ {
+ skip = get_u32le(&header[0x8]);
+ uint32_t data_size = get_u32le(&header[0xc]);
+ if (data_size == length() - skip)
{
- skip = get_u32le(&header[0x18]);
- osd_printf_verbose("harddriv: detected 2MG, creator is %c%c%c%c, data at %08x\n", header[4], header[5], header[6], header[7], skip);
+ osd_printf_verbose("harddriv: detected Anex86 HDI, data at %08x\n", skip);
}
- // check for HDI format
- else if (is_filetype("hdi"))
+ else
{
- skip = get_u32le(&header[0x8]);
- uint32_t data_size = get_u32le(&header[0xc]);
- if (data_size == length() - skip)
- {
- osd_printf_verbose("harddriv: detected Anex86 HDI, data at %08x\n", skip);
- }
- else
- {
- skip = 0;
- }
+ skip = 0;
}
+ }
+ try
+ {
m_hard_disk_handle.reset(new hard_disk_file(image_core_file(), skip));
if (m_hard_disk_handle)
return std::error_condition();
}
-
- return image_error::UNSPECIFIED;
+ catch (...)
+ {
+ err = image_error::INVALIDIMAGE;
+ }
}
/* if we had an error, close out the CHD */
- m_origchd.close();
m_diffchd.close();
+ m_origchd.close();
m_chd = nullptr;
if (err)