summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/jfd_dsk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/jfd_dsk.cpp')
-rw-r--r--src/lib/formats/jfd_dsk.cpp40
1 files changed, 22 insertions, 18 deletions
diff --git a/src/lib/formats/jfd_dsk.cpp b/src/lib/formats/jfd_dsk.cpp
index 6a07d5c2fef..46e933cedf1 100644
--- a/src/lib/formats/jfd_dsk.cpp
+++ b/src/lib/formats/jfd_dsk.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Nigel Barnes
/*********************************************************************
- formats/jfd_dsk.c
+ formats/jfd_dsk.cpp
JASPP Floppy Disk image format
@@ -161,6 +161,7 @@
#include "formats/jfd_dsk.h"
#include "ioprocs.h"
+#include "multibyte.h"
#include "osdcore.h" // osd_printf_*
@@ -174,29 +175,31 @@ jfd_format::jfd_format()
{
}
-const char *jfd_format::name() const
+const char *jfd_format::name() const noexcept
{
return "jfd";
}
-const char *jfd_format::description() const
+const char *jfd_format::description() const noexcept
{
return "JASPP Floppy Disk image";
}
-const char *jfd_format::extensions() const
+const char *jfd_format::extensions() const noexcept
{
return "jfd";
}
-int jfd_format::identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants)
+int jfd_format::identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const
{
uint64_t size;
- if (io.length(size))
+ if (io.length(size) || !size)
return 0;
+
std::vector<uint8_t> img(size);
- size_t actual;
- io.read_at(0, &img[0], size, actual);
+ auto const [ioerr, actual] = read_at(io, 0, &img[0], size);
+ if (ioerr || (actual != size))
+ return 0;
int err;
std::vector<uint8_t> gz_ptr(4);
@@ -220,30 +223,31 @@ int jfd_format::identify(util::random_read &io, uint32_t form_factor, const std:
err = inflateEnd(&d_stream);
if (err != Z_OK) return 0;
- img = gz_ptr;
+ img = std::move(gz_ptr);
}
if (!memcmp(&img[0], JFD_HEADER, sizeof(JFD_HEADER))) {
- return 100;
+ return FIFID_SIGN;
}
return 0;
}
-bool jfd_format::load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image)
+bool jfd_format::load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image &image) const
{
uint64_t size;
if (io.length(size))
return false;
std::vector<uint8_t> img(size);
- size_t actual;
- io.read_at(0, &img[0], size, actual);
+ auto const [ioerr, actual] = read_at(io, 0, &img[0], size);
+ if (ioerr || (actual != size))
+ return false;
int err;
std::vector<uint8_t> gz_ptr;
z_stream d_stream;
- int inflate_size = (img[size - 1] << 24) | (img[size - 2] << 16) | (img[size - 3] << 8) | img[size - 4];
+ int inflate_size = get_u32le(&img[size - 4]);
if (!memcmp(&img[0], GZ_HEADER, sizeof(GZ_HEADER))) {
gz_ptr.resize(inflate_size);
@@ -272,7 +276,7 @@ bool jfd_format::load(util::random_read &io, uint32_t form_factor, const std::ve
return false;
}
size = inflate_size;
- img = gz_ptr;
+ img = std::move(gz_ptr);
}
osd_printf_verbose("jfd_dsk: loading %s\n", &img[48]);
@@ -365,14 +369,14 @@ bool jfd_format::load(util::random_read &io, uint32_t form_factor, const std::ve
build_wd_track_mfm(track / 2, track % 2, image, den[0] * 50000, spt, sects, 90, 32, 22);
}
}
- image->set_variant(floppy_image::DSDD);
+ image.set_variant(floppy_image::DSDD);
return true;
}
-bool jfd_format::supports_save() const
+bool jfd_format::supports_save() const noexcept
{
return false;
}
-const floppy_format_type FLOPPY_JFD_FORMAT = &floppy_image_format_creator<jfd_format>;
+const jfd_format FLOPPY_JFD_FORMAT;