diff options
Diffstat (limited to 'src/lib/formats/ipf_dsk.cpp')
-rw-r--r-- | src/lib/formats/ipf_dsk.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/lib/formats/ipf_dsk.cpp b/src/lib/formats/ipf_dsk.cpp index 0f1725f5c14..10c9ba2c4a9 100644 --- a/src/lib/formats/ipf_dsk.cpp +++ b/src/lib/formats/ipf_dsk.cpp @@ -2,6 +2,8 @@ // copyright-holders:Olivier Galibert #include "ipf_dsk.h" +#include "ioprocs.h" + #include <cassert> @@ -27,11 +29,12 @@ bool ipf_format::supports_save() const return false; } -int ipf_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) +int ipf_format::identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) { static const uint8_t refh[12] = { 0x43, 0x41, 0x50, 0x53, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0xd5, 0x73, 0xba }; uint8_t h[12]; - io_generic_read(io, h, 0, 12); + size_t actual; + io.read_at(0, h, 12, actual); if(!memcmp(h, refh, 12)) return 100; @@ -39,14 +42,16 @@ int ipf_format::identify(io_generic *io, uint32_t form_factor, const std::vector return 0; } -bool ipf_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) +bool ipf_format::load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { - ipf_decode dec; - uint64_t size = io_generic_size(io); + uint64_t size; + if (io.length(size)) + return false; std::vector<uint8_t> data(size); - io_generic_read(io, &data[0], 0, size); - bool res = dec.parse(data, image); - return res; + size_t actual; + io.read_at(0, &data[0], size, actual); + ipf_decode dec; + return dec.parse(data, image); } uint32_t ipf_format::ipf_decode::r32(const uint8_t *p) |