summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/util/harddisk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/util/harddisk.cpp')
-rw-r--r--src/lib/util/harddisk.cpp33
1 files changed, 29 insertions, 4 deletions
diff --git a/src/lib/util/harddisk.cpp b/src/lib/util/harddisk.cpp
index d009317922e..46cf88bab43 100644
--- a/src/lib/util/harddisk.cpp
+++ b/src/lib/util/harddisk.cpp
@@ -24,7 +24,7 @@ hard_disk_file::hard_disk_file(chd_file *_chd)
{
chd = _chd;
fhandle = nullptr;
- hdinfo.fileoffset = 0;
+ fileoffset = 0;
std::string metadata;
std::error_condition err;
@@ -56,7 +56,7 @@ hard_disk_file::hard_disk_file(util::random_read_write &corefile, uint32_t skipo
hdinfo.cylinders = 0;
hdinfo.heads = 0;
hdinfo.sectors = 0;
- hdinfo.fileoffset = skipoffs;
+ fileoffset = skipoffs;
// attempt to guess geometry in case this is an ATA situation
for (uint32_t totalsectors = (length - skipoffs) / hdinfo.sectorbytes; ; totalsectors++)
@@ -113,7 +113,7 @@ bool hard_disk_file::read(uint32_t lbasector, void *buffer)
else
{
size_t actual = 0;
- std::error_condition err = fhandle->seek(hdinfo.fileoffset + (lbasector * hdinfo.sectorbytes), SEEK_SET);
+ std::error_condition err = fhandle->seek(fileoffset + (lbasector * hdinfo.sectorbytes), SEEK_SET);
if (!err)
err = fhandle->read(buffer, hdinfo.sectorbytes, actual);
return !err && (actual == hdinfo.sectorbytes);
@@ -146,7 +146,7 @@ bool hard_disk_file::write(uint32_t lbasector, const void *buffer)
else
{
size_t actual = 0;
- std::error_condition err = fhandle->seek(hdinfo.fileoffset + (lbasector * hdinfo.sectorbytes), SEEK_SET);
+ std::error_condition err = fhandle->seek(fileoffset + (lbasector * hdinfo.sectorbytes), SEEK_SET);
if (!err)
err = fhandle->write(buffer, hdinfo.sectorbytes, actual);
return !err && (actual == hdinfo.sectorbytes);
@@ -190,3 +190,28 @@ bool hard_disk_file::set_block_size(uint32_t blocksize)
return true;
}
}
+
+
+std::error_condition hard_disk_file::get_inquiry_data(std::vector<uint8_t> &data) const
+{
+ if(chd)
+ return chd->read_metadata(HARD_DISK_IDENT_METADATA_TAG, 0, data);
+ else
+ return std::error_condition(chd_file::error::METADATA_NOT_FOUND);
+}
+
+std::error_condition hard_disk_file::get_cis_data(std::vector<uint8_t> &data) const
+{
+ if(chd)
+ return chd->read_metadata(PCMCIA_CIS_METADATA_TAG, 0, data);
+ else
+ return std::error_condition(chd_file::error::METADATA_NOT_FOUND);
+}
+
+std::error_condition hard_disk_file::get_disk_key_data(std::vector<uint8_t> &data) const
+{
+ if(chd)
+ return chd->read_metadata(HARD_DISK_KEY_METADATA_TAG, 0, data);
+ else
+ return std::error_condition(chd_file::error::METADATA_NOT_FOUND);
+}