summaryrefslogtreecommitdiffstatshomepage
path: root/src/tools/imgtool/imghd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/imgtool/imghd.cpp')
-rw-r--r--src/tools/imgtool/imghd.cpp74
1 files changed, 30 insertions, 44 deletions
diff --git a/src/tools/imgtool/imghd.cpp b/src/tools/imgtool/imghd.cpp
index b868b692c63..60a79469051 100644
--- a/src/tools/imgtool/imghd.cpp
+++ b/src/tools/imgtool/imghd.cpp
@@ -9,34 +9,24 @@
Raphael Nabet 2003
*/
-#include "imgtool.h"
-#include "harddisk.h"
#include "imghd.h"
+#include "library.h"
+#include "stream.h"
+#include "harddisk.h"
+#include "opresolv.h"
-static imgtoolerr_t map_chd_error(chd_error chderr)
-{
- imgtoolerr_t err;
- switch(chderr)
- {
- case CHDERR_NONE:
- err = IMGTOOLERR_SUCCESS;
- break;
- case CHDERR_OUT_OF_MEMORY:
- err = IMGTOOLERR_OUTOFMEMORY;
- break;
- case CHDERR_FILE_NOT_WRITEABLE:
- err = IMGTOOLERR_READONLY;
- break;
- case CHDERR_NOT_SUPPORTED:
- err = IMGTOOLERR_UNIMPLEMENTED;
- break;
- default:
- err = IMGTOOLERR_UNEXPECTED;
- break;
- }
- return err;
+static imgtoolerr_t map_chd_error(std::error_condition chderr)
+{
+ if (!chderr)
+ return IMGTOOLERR_SUCCESS;
+ else if (std::errc::not_enough_memory == chderr)
+ return IMGTOOLERR_OUTOFMEMORY;
+ else if (chd_file::error::FILE_NOT_WRITEABLE == chderr)
+ return IMGTOOLERR_READONLY;
+ else
+ return IMGTOOLERR_UNEXPECTED;
}
@@ -50,7 +40,7 @@ imgtoolerr_t imghd_create(imgtool::stream &stream, uint32_t hunksize, uint32_t c
{
imgtoolerr_t err = IMGTOOLERR_SUCCESS;
chd_file chd;
- chd_error rc;
+ std::error_condition rc;
chd_codec_type compression[4] = { CHD_CODEC_NONE };
/* sanity check args -- see parse_hunk_size() in src/lib/util/chd.cpp */
@@ -73,17 +63,17 @@ imgtoolerr_t imghd_create(imgtool::stream &stream, uint32_t hunksize, uint32_t c
const uint64_t logicalbytes = (uint64_t)cylinders * heads * sectors * seclen;
/* create the new hard drive */
- rc = chd.create(*stream.core_file(), logicalbytes, hunksize, seclen, compression);
- if (rc != CHDERR_NONE)
+ rc = chd.create(stream_read_write(stream, 0), logicalbytes, hunksize, seclen, compression);
+ if (rc)
{
err = map_chd_error(rc);
return err;
}
/* write the metadata */
- const std::string metadata = string_format(HARD_DISK_METADATA_FORMAT, cylinders, heads, sectors, seclen);
- err = (imgtoolerr_t)chd.write_metadata(HARD_DISK_METADATA_TAG, 0, metadata);
- if (rc != CHDERR_NONE)
+ const std::string metadata = util::string_format(HARD_DISK_METADATA_FORMAT, cylinders, heads, sectors, seclen);
+ rc = chd.write_metadata(HARD_DISK_METADATA_TAG, 0, metadata);
+ if (rc)
{
err = map_chd_error(rc);
return err;
@@ -118,19 +108,19 @@ imgtoolerr_t imghd_create(imgtool::stream &stream, uint32_t hunksize, uint32_t c
*/
imgtoolerr_t imghd_open(imgtool::stream &stream, struct mess_hard_disk_file *hard_disk)
{
- chd_error chderr;
+ std::error_condition chderr;
imgtoolerr_t err = IMGTOOLERR_SUCCESS;
hard_disk->hard_disk = nullptr;
- chderr = hard_disk->chd.open(*stream.core_file(), !stream.is_read_only());
+ chderr = hard_disk->chd.open(stream_read_write(stream, 0), !stream.is_read_only());
if (chderr)
{
err = map_chd_error(chderr);
goto done;
}
- hard_disk->hard_disk = hard_disk_open(&hard_disk->chd);
+ hard_disk->hard_disk = new hard_disk_file(&hard_disk->chd);
if (!hard_disk->hard_disk)
{
err = IMGTOOLERR_UNEXPECTED;
@@ -155,7 +145,7 @@ void imghd_close(struct mess_hard_disk_file *disk)
{
if (disk->hard_disk)
{
- hard_disk_close(disk->hard_disk);
+ delete disk->hard_disk;
disk->hard_disk = nullptr;
}
if (disk->stream)
@@ -174,9 +164,8 @@ void imghd_close(struct mess_hard_disk_file *disk)
*/
imgtoolerr_t imghd_read(struct mess_hard_disk_file *disk, uint32_t lbasector, void *buffer)
{
- uint32_t reply;
- reply = hard_disk_read(disk->hard_disk, lbasector, buffer);
- return (imgtoolerr_t)(reply ? IMGTOOLERR_SUCCESS : map_chd_error((chd_error)reply));
+ uint32_t reply = disk->hard_disk->read(lbasector, buffer);
+ return reply ? IMGTOOLERR_SUCCESS : IMGTOOLERR_READERROR;
}
@@ -188,9 +177,8 @@ imgtoolerr_t imghd_read(struct mess_hard_disk_file *disk, uint32_t lbasector, vo
*/
imgtoolerr_t imghd_write(struct mess_hard_disk_file *disk, uint32_t lbasector, const void *buffer)
{
- uint32_t reply;
- reply = hard_disk_write(disk->hard_disk, lbasector, buffer);
- return (imgtoolerr_t)(reply ? IMGTOOLERR_SUCCESS : map_chd_error((chd_error)reply));
+ uint32_t reply = disk->hard_disk->write(lbasector, buffer);
+ return reply ? IMGTOOLERR_SUCCESS : IMGTOOLERR_WRITEERROR;
}
@@ -200,11 +188,9 @@ imgtoolerr_t imghd_write(struct mess_hard_disk_file *disk, uint32_t lbasector, c
Return pointer to the header of MAME HD image
*/
-const hard_disk_info *imghd_get_header(struct mess_hard_disk_file *disk)
+const hard_disk_file::info &imghd_get_header(struct mess_hard_disk_file *disk)
{
- const hard_disk_info *reply;
- reply = hard_disk_get_info(disk->hard_disk);
- return reply;
+ return disk->hard_disk->get_info();
}