summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/smartmed.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/smartmed.cpp')
-rw-r--r--src/devices/machine/smartmed.cpp39
1 files changed, 21 insertions, 18 deletions
diff --git a/src/devices/machine/smartmed.cpp b/src/devices/machine/smartmed.cpp
index 18c86f7cc70..75473c8922d 100644
--- a/src/devices/machine/smartmed.cpp
+++ b/src/devices/machine/smartmed.cpp
@@ -24,6 +24,8 @@
#include "softlist_dev.h"
+#include <tuple>
+
namespace {
@@ -69,18 +71,17 @@ enum
*/
std::error_condition smartmedia_image_device::smartmedia_format_1()
{
+ std::error_condition err;
+ size_t bytes_read;
+
SM_disk_image_header custom_header;
- const int bytes_read = fread(&custom_header, sizeof(custom_header));
- if (bytes_read != sizeof(custom_header))
- {
- return std::errc::io_error;
- }
+ std::tie(err, bytes_read) = read(image_core_file(), &custom_header, sizeof(custom_header));
+ if (err || (bytes_read != sizeof(custom_header)))
+ return err ? err : std::errc::io_error;
if (custom_header.version > 1)
- {
return image_error::INVALIDIMAGE;
- }
m_page_data_size = get_UINT32BE(custom_header.page_data_size);
m_page_total_size = get_UINT32BE(custom_header.page_total_size);
@@ -116,7 +117,10 @@ std::error_condition smartmedia_image_device::smartmedia_format_1()
fread(&m_mp_opcode, 1);
fread(m_data_uid_ptr.get(), 256 + 16);
}
- fread(m_feeprom_data, m_page_total_size*m_num_pages);
+
+ std::tie(err, m_feeprom_data, bytes_read) = read(image_core_file(), m_page_total_size * m_num_pages);
+ if (err || (bytes_read != (m_page_total_size * m_num_pages)))
+ return err ? err : std::errc::io_error;
#ifdef SMARTMEDIA_IMAGE_SAVE
m_image_format = 1;
@@ -163,23 +167,20 @@ int smartmedia_image_device::detect_geometry( uint8_t id1, uint8_t id2)
std::error_condition smartmedia_image_device::smartmedia_format_2()
{
+ std::error_condition err;
+ size_t bytes_read;
+
disk_image_format_2_header custom_header;
- const int bytes_read = fread(&custom_header, sizeof(custom_header));
- if (bytes_read != sizeof(custom_header))
- {
- return std::errc::io_error;
- }
+ std::tie(err, bytes_read) = read(image_core_file(), &custom_header, sizeof(custom_header));
+ if (err || (bytes_read != sizeof(custom_header)))
+ return err ? err : std::errc::io_error;
if ((custom_header.data1[0] != 0xEC) && (custom_header.data1[0] != 0x98))
- {
return image_error::INVALIDIMAGE;
- }
if (!detect_geometry(custom_header.data1[0], custom_header.data1[1]))
- {
return image_error::INVALIDIMAGE;
- }
m_feeprom_data = std::make_unique<uint8_t[]>(m_page_total_size*m_num_pages);
m_data_uid_ptr = std::make_unique<uint8_t[]>(256 + 16);
@@ -207,7 +208,9 @@ std::error_condition smartmedia_image_device::smartmedia_format_2()
}
memcpy(m_data_uid_ptr.get() + 256, custom_header.data3, 16);
- fread(m_feeprom_data, m_page_total_size*m_num_pages);
+ std::tie(err, m_feeprom_data, bytes_read) = read(image_core_file(), m_page_total_size * m_num_pages);
+ if (err || (bytes_read != (m_page_total_size * m_num_pages)))
+ return err ? err : std::errc::io_error;
#ifdef SMARTMEDIA_IMAGE_SAVE
m_image_format = 2;