summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/fsmgr.cpp
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2021-12-14 21:38:14 -0500
committer AJR <ajrhacker@users.noreply.github.com>2021-12-14 21:42:42 -0500
commit1214aac0928e5c7ebe3484f06a5c9a000f9962ef (patch)
tree08e4ee14aa16c1fd721dfef0b9dc1eb28471eb8a /src/lib/formats/fsmgr.cpp
parent8a8b56bc24a398f5bda13b0e24a56012a1252353 (diff)
Filesystem code cleanup
- Eliminate dependencies on emu.h, replacing most fatalerror calls and floptool's ersatz emu_fatalerror class with standard exception classes - Use range-based std::string constructors in some methods - Move filesystem metadata handling to a separate source file - Eliminate src/emu as an include path for libformats (necessitates kludge in ti99_dsk.cpp)
Diffstat (limited to 'src/lib/formats/fsmgr.cpp')
-rw-r--r--src/lib/formats/fsmgr.cpp139
1 files changed, 50 insertions, 89 deletions
diff --git a/src/lib/formats/fsmgr.cpp b/src/lib/formats/fsmgr.cpp
index fa48704f935..1fe13037418 100644
--- a/src/lib/formats/fsmgr.cpp
+++ b/src/lib/formats/fsmgr.cpp
@@ -5,9 +5,12 @@
// Currently limited to floppies and creation of preformatted images
-#include "emu.h"
#include "fsmgr.h"
+#include "strformat.h"
+
+#include <stdexcept>
+
void fs_refcounted_inner::ref()
{
m_ref ++;
@@ -100,17 +103,17 @@ char filesystem_manager_t::directory_separator() const
void filesystem_t::format(const fs_meta_data &meta)
{
- fatalerror("format called on a filesystem not supporting it.\n");
+ throw std::logic_error("format called on a filesystem not supporting it");
}
filesystem_t::dir_t filesystem_t::root()
{
- fatalerror("root called on a filesystem not supporting it.\n");
+ throw std::logic_error("root called on a filesystem not supporting it");
}
fs_meta_data filesystem_t::metadata()
{
- fatalerror("filesystem_t::metadata called on a filesystem not supporting it.\n");
+ throw std::logic_error("filesystem_t::metadata called on a filesystem not supporting it");
}
void fsblk_t::set_block_size(uint32_t block_size)
@@ -122,24 +125,24 @@ void fsblk_t::set_block_size(uint32_t block_size)
uint8_t *fsblk_t::iblock_t::offset(const char *function, uint32_t off, uint32_t size)
{
if(off + size > m_size)
- fatalerror("block_t::%s out-of-block access, offset=%d, size=%d, block size=%d\n", function, off, size, m_size);
+ throw std::out_of_range(util::string_format("block_t::%s out-of-block access, offset=%d, size=%d, block size=%d", function, off, size, m_size));
return data() + off;
}
const uint8_t *fsblk_t::iblock_t::rooffset(const char *function, uint32_t off, uint32_t size)
{
if(off + size > m_size)
- fatalerror("block_t::%s out-of-block read access, offset=%d, size=%d, block size=%d\n", function, off, size, m_size);
+ throw std::out_of_range(util::string_format("block_t::%s out-of-block read access, offset=%d, size=%d, block size=%d\n", function, off, size, m_size));
return rodata() + off;
}
-void fsblk_t::block_t::copy(u32 offset, const uint8_t *src, u32 size)
+void fsblk_t::block_t::copy(uint32_t offset, const uint8_t *src, uint32_t size)
{
uint8_t *blk = m_object->offset("copy", offset, size);
memcpy(blk, src, size);
}
-void fsblk_t::block_t::fill(u32 offset, uint8_t data, u32 size)
+void fsblk_t::block_t::fill(uint32_t offset, uint8_t data, uint32_t size)
{
uint8_t *blk = m_object->offset("fill", offset, size);
memset(blk, data, size);
@@ -151,26 +154,26 @@ void fsblk_t::block_t::fill(uint8_t data)
memset(blk, data, m_object->size());
}
-void fsblk_t::block_t::wstr(u32 offset, const std::string &str)
+void fsblk_t::block_t::wstr(uint32_t offset, const std::string &str)
{
uint8_t *blk = m_object->offset("wstr", offset, str.size());
memcpy(blk, str.data(), str.size());
}
-void fsblk_t::block_t::w8(u32 offset, uint8_t data)
+void fsblk_t::block_t::w8(uint32_t offset, uint8_t data)
{
uint8_t *blk = m_object->offset("w8", offset, 1);
blk[0] = data;
}
-void fsblk_t::block_t::w16b(u32 offset, u16 data)
+void fsblk_t::block_t::w16b(uint32_t offset, uint16_t data)
{
uint8_t *blk = m_object->offset("w16b", offset, 2);
blk[0] = data >> 8;
blk[1] = data;
}
-void fsblk_t::block_t::w24b(u32 offset, u32 data)
+void fsblk_t::block_t::w24b(uint32_t offset, uint32_t data)
{
uint8_t *blk = m_object->offset("w24b", offset, 3);
blk[0] = data >> 16;
@@ -178,7 +181,7 @@ void fsblk_t::block_t::w24b(u32 offset, u32 data)
blk[2] = data;
}
-void fsblk_t::block_t::w32b(u32 offset, u32 data)
+void fsblk_t::block_t::w32b(uint32_t offset, uint32_t data)
{
uint8_t *blk = m_object->offset("w32b", offset, 4);
blk[0] = data >> 24;
@@ -187,14 +190,14 @@ void fsblk_t::block_t::w32b(u32 offset, u32 data)
blk[3] = data;
}
-void fsblk_t::block_t::w16l(u32 offset, u16 data)
+void fsblk_t::block_t::w16l(uint32_t offset, uint16_t data)
{
uint8_t *blk = m_object->offset("w16l", offset, 2);
blk[0] = data;
blk[1] = data >> 8;
}
-void fsblk_t::block_t::w24l(u32 offset, u32 data)
+void fsblk_t::block_t::w24l(uint32_t offset, uint32_t data)
{
uint8_t *blk = m_object->offset("w24l", offset, 3);
blk[0] = data;
@@ -202,7 +205,7 @@ void fsblk_t::block_t::w24l(u32 offset, u32 data)
blk[2] = data >> 16;
}
-void fsblk_t::block_t::w32l(u32 offset, u32 data)
+void fsblk_t::block_t::w32l(uint32_t offset, uint32_t data)
{
uint8_t *blk = m_object->offset("w32l", offset, 4);
blk[0] = data;
@@ -211,52 +214,49 @@ void fsblk_t::block_t::w32l(u32 offset, u32 data)
blk[3] = data >> 24;
}
-std::string fsblk_t::block_t::rstr(u32 offset, u32 size)
+std::string fsblk_t::block_t::rstr(uint32_t offset, uint32_t size)
{
- const u8 *d = m_object->rooffset("rstr", offset, size);
- std::string res;
- for(u32 i=0; i != size; i++)
- res += char(*d++);
- return res;
+ const uint8_t *d = m_object->rooffset("rstr", offset, size);
+ return std::string(d, d + size);
}
-uint8_t fsblk_t::block_t::r8(u32 offset)
+uint8_t fsblk_t::block_t::r8(uint32_t offset)
{
const uint8_t *blk = m_object->offset("r8", offset, 1);
return blk[0];
}
-uint16_t fsblk_t::block_t::r16b(u32 offset)
+uint16_t fsblk_t::block_t::r16b(uint32_t offset)
{
const uint8_t *blk = m_object->offset("r16b", offset, 2);
return (blk[0] << 8) | blk[1];
}
-uint32_t fsblk_t::block_t::r24b(u32 offset)
+uint32_t fsblk_t::block_t::r24b(uint32_t offset)
{
const uint8_t *blk = m_object->offset("r24b", offset, 3);
return (blk[0] << 16) | (blk[1] << 8) | blk[2];
}
-uint32_t fsblk_t::block_t::r32b(u32 offset)
+uint32_t fsblk_t::block_t::r32b(uint32_t offset)
{
const uint8_t *blk = m_object->offset("r32b", offset, 4);
return (blk[0] << 24) | (blk[1] << 16) | (blk[2] << 8) | blk[3];
}
-uint16_t fsblk_t::block_t::r16l(u32 offset)
+uint16_t fsblk_t::block_t::r16l(uint32_t offset)
{
const uint8_t *blk = m_object->offset("r16l", offset, 2);
return blk[0] | (blk[1] << 8);
}
-uint32_t fsblk_t::block_t::r24l(u32 offset)
+uint32_t fsblk_t::block_t::r24l(uint32_t offset)
{
const uint8_t *blk = m_object->offset("r24l", offset, 3);
return blk[0] | (blk[1] << 8) | (blk[2] << 16);
}
-uint32_t fsblk_t::block_t::r32l(u32 offset)
+uint32_t fsblk_t::block_t::r32l(uint32_t offset)
{
const uint8_t *blk = m_object->offset("r32l", offset, 4);
return blk[0] | (blk[1] << 8) | (blk[2] << 16) | (blk[3] << 24);
@@ -264,12 +264,12 @@ uint32_t fsblk_t::block_t::r32l(u32 offset)
-void filesystem_t::copy(uint8_t *p, const uint8_t *src, u32 size)
+void filesystem_t::copy(uint8_t *p, const uint8_t *src, uint32_t size)
{
memcpy(p, src, size);
}
-void filesystem_t::fill(uint8_t *p, uint8_t data, u32 size)
+void filesystem_t::fill(uint8_t *p, uint8_t data, uint32_t size)
{
memset(p, data, size);
}
@@ -284,20 +284,20 @@ void filesystem_t::w8(uint8_t *p, uint8_t data)
p[0] = data;
}
-void filesystem_t::w16b(uint8_t *p, u16 data)
+void filesystem_t::w16b(uint8_t *p, uint16_t data)
{
p[0] = data >> 8;
p[1] = data;
}
-void filesystem_t::w24b(uint8_t *p, u32 data)
+void filesystem_t::w24b(uint8_t *p, uint32_t data)
{
p[0] = data >> 16;
p[1] = data >> 8;
p[2] = data;
}
-void filesystem_t::w32b(uint8_t *p, u32 data)
+void filesystem_t::w32b(uint8_t *p, uint32_t data)
{
p[0] = data >> 24;
p[1] = data >> 16;
@@ -305,20 +305,20 @@ void filesystem_t::w32b(uint8_t *p, u32 data)
p[3] = data;
}
-void filesystem_t::w16l(uint8_t *p, u16 data)
+void filesystem_t::w16l(uint8_t *p, uint16_t data)
{
p[0] = data;
p[1] = data >> 8;
}
-void filesystem_t::w24l(uint8_t *p, u32 data)
+void filesystem_t::w24l(uint8_t *p, uint32_t data)
{
p[0] = data;
p[1] = data >> 8;
p[2] = data >> 16;
}
-void filesystem_t::w32l(uint8_t *p, u32 data)
+void filesystem_t::w32l(uint8_t *p, uint32_t data)
{
p[0] = data;
p[1] = data >> 8;
@@ -326,12 +326,9 @@ void filesystem_t::w32l(uint8_t *p, u32 data)
p[3] = data >> 24;
}
-std::string filesystem_t::rstr(const uint8_t *p, u32 size)
+std::string filesystem_t::rstr(const uint8_t *p, uint32_t size)
{
- std::string res;
- for(u32 i=0; i != size; i++)
- res += char(*p++);
- return res;
+ return std::string(p, p + size);
}
uint8_t filesystem_t::r8(const uint8_t *p)
@@ -377,77 +374,41 @@ std::string filesystem_t::trim_end_spaces(const std::string &str)
filesystem_t::file_t filesystem_t::idir_t::file_create(const fs_meta_data &info)
{
- fatalerror("file_create called on a filesystem not supporting write\n");
+ throw std::logic_error("file_create called on a filesystem not supporting write");
}
void filesystem_t::idir_t::file_delete(uint64_t key)
{
- fatalerror("file_delete called on a filesystem not supporting write\n");
+ throw std::logic_error("file_delete called on a filesystem not supporting write");
}
-void filesystem_t::ifile_t::replace(const std::vector<u8> &data)
+void filesystem_t::ifile_t::replace(const std::vector<uint8_t> &data)
{
- fatalerror("replace called on a filesystem not supporting write \n");
+ throw std::logic_error("replace called on a filesystem not supporting write");
}
-void filesystem_t::ifile_t::rsrc_replace(const std::vector<u8> &data)
+void filesystem_t::ifile_t::rsrc_replace(const std::vector<uint8_t> &data)
{
- fatalerror("rsrc_replace called on a filesystem not supporting write or resource forks \n");
+ throw std::logic_error("rsrc_replace called on a filesystem not supporting write or resource forks");
}
void filesystem_t::ifile_t::metadata_change(const fs_meta_data &info)
{
- fatalerror("metadata_change called on a filesystem not supporting write \n");
+ throw std::logic_error("metadata_change called on a filesystem not supporting write");
}
void filesystem_t::idir_t::metadata_change(const fs_meta_data &info)
{
- fatalerror("metadata_change called on a filesystem not supporting write \n");
+ throw std::logic_error("metadata_change called on a filesystem not supporting write");
}
void filesystem_t::metadata_change(const fs_meta_data &info)
{
- fatalerror("metadata_change called on a filesystem not supporting write \n");
-}
-
-std::vector<u8> filesystem_t::ifile_t::rsrc_read_all()
-{
- fatalerror("rsrc_read_all called on a filesystem without resource forks\n");
+ throw std::logic_error("metadata_change called on a filesystem not supporting write");
}
-const char *fs_meta_data::entry_name(fs_meta_name name)
+std::vector<uint8_t> filesystem_t::ifile_t::rsrc_read_all()
{
- switch(name) {
- case fs_meta_name::basic: return "basic";
- case fs_meta_name::creation_date: return "creation_date";
- case fs_meta_name::length: return "length";
- case fs_meta_name::loading_address: return "loading_address";
- case fs_meta_name::locked: return "locked";
- case fs_meta_name::modification_date: return "modification_date";
- case fs_meta_name::name: return "name";
- case fs_meta_name::os_minimum_version: return "os_minimum_version";
- case fs_meta_name::os_version: return "os_version";
- case fs_meta_name::rsrc_length: return "rsrc_length";
- case fs_meta_name::sequential: return "sequential";
- case fs_meta_name::size_in_blocks: return "size_in_blocks";
- }
- return "";
+ throw std::logic_error("rsrc_read_all called on a filesystem without resource forks");
}
-
-std::string fs_meta::to_string(fs_meta_type type, const fs_meta &m)
-{
- switch(type) {
- case fs_meta_type::string: return m.as_string();
- case fs_meta_type::number: return util::string_format("0x%x", m.as_number());
- case fs_meta_type::flag: return m.as_flag() ? "t" : "f";
- case fs_meta_type::date: {
- auto dt = m.as_date();
- return util::string_format("%04d-%02d-%02d %02d:%02d:%02d",
- dt.year, dt.month, dt.day_of_month,
- dt.hour, dt.minute, dt.second);
- }
- }
- return std::string("");
-}
-