diff options
author | 2021-04-28 22:58:51 +0200 | |
---|---|---|
committer | 2021-04-28 22:58:57 +0200 | |
commit | 18d1768325a37b3496a55a84698e7c7dc789e14c (patch) | |
tree | cdcbf932a7e76af7160b491ea050e39bc340228f /src/lib/formats/fsmgr.cpp | |
parent | 67d7e16274f71ab6fefeeedcaab12066d2a12668 (diff) |
floppy: first steps on metadata, and hopefully make gcc happier on enumerate
Diffstat (limited to 'src/lib/formats/fsmgr.cpp')
-rw-r--r-- | src/lib/formats/fsmgr.cpp | 76 |
1 files changed, 70 insertions, 6 deletions
diff --git a/src/lib/formats/fsmgr.cpp b/src/lib/formats/fsmgr.cpp index ec80710ac33..6423d523300 100644 --- a/src/lib/formats/fsmgr.cpp +++ b/src/lib/formats/fsmgr.cpp @@ -39,15 +39,15 @@ void fsblk_t::iblock_t::unref_weak() } -void filesystem_manager_t::enumerate(floppy_enumerator &fe, uint32_t form_factor, const std::vector<uint32_t> &variants) const +void filesystem_manager_t::enumerate_f(floppy_enumerator &fe, uint32_t form_factor, const std::vector<uint32_t> &variants) const { } -void filesystem_manager_t::enumerate(hd_enumerator &he) const +void filesystem_manager_t::enumerate_h(hd_enumerator &he) const { } -void filesystem_manager_t::enumerate(cdrom_enumerator &ce) const +void filesystem_manager_t::enumerate_c(cdrom_enumerator &ce) const { } @@ -71,14 +71,37 @@ bool filesystem_manager_t::has(uint32_t form_factor, const std::vector<uint32_t> return false; } -void filesystem_t::format() +std::vector<fs_meta_description> filesystem_manager_t::volume_meta_description() const { - fatalerror("format called on filesystem not supporting it.\n"); + std::vector<fs_meta_description> res; + return res; +} + +std::vector<fs_meta_description> filesystem_manager_t::file_meta_description() const +{ + std::vector<fs_meta_description> res; + return res; +} + +std::vector<fs_meta_description> filesystem_manager_t::directory_meta_description() const +{ + std::vector<fs_meta_description> res; + return res; +} + +void filesystem_t::format(const fs_meta_data &meta) +{ + fatalerror("format called on a filesystem not supporting it.\n"); } filesystem_t::dir_t filesystem_t::root() { - fatalerror("root called on filesystem not supporting it.\n"); + fatalerror("root called on a filesystem not supporting it.\n"); +} + +fs_meta_data filesystem_t::metadata() +{ + fatalerror("filesystem_t::metadata called on a filesystem not supporting it.\n"); } void fsblk_t::set_block_size(uint32_t block_size) @@ -94,6 +117,13 @@ uint8_t *fsblk_t::iblock_t::offset(const char *function, uint32_t off, uint32_t 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); + return rodata() + off; +} + void fsblk_t::block_t::copy(u32 offset, const uint8_t *src, u32 size) { uint8_t *blk = m_block->offset("copy", offset, size); @@ -155,3 +185,37 @@ void fsblk_t::block_t::w32l(u32 offset, u32 data) blk[2] = data >> 16; blk[3] = data >> 24; } + +std::string fsblk_t::block_t::rstr(u32 offset, u32 size) +{ + const u8 *d = m_block->rooffset("rstr", offset, size); + std::string res; + for(u32 i=0; i != size; i++) + res += char(*d++); + return res; +} + +const char *fs_meta_get_name(fs_meta_name name) +{ + switch(name) { + 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::sequential: return "sequential"; + case fs_meta_name::modification_date: return "modification_date"; + case fs_meta_name::name: return "name"; + case fs_meta_name::size_in_blocks: return "size_in_blocks"; + } +} + +std::string fs_meta_to_string(fs_meta_type type, const fs_meta &m) +{ + switch(type) { + case fs_meta_type::string: return std::get<std::string>(m); + case fs_meta_type::number: return util::string_format("0x%x", std::get<uint64_t>(m)); + case fs_meta_type::flag: return std::get<bool>(m) ? "t" : "f"; + case fs_meta_type::date: abort(); + } +} + |