summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/fsmgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/fsmgr.cpp')
-rw-r--r--src/lib/formats/fsmgr.cpp177
1 files changed, 25 insertions, 152 deletions
diff --git a/src/lib/formats/fsmgr.cpp b/src/lib/formats/fsmgr.cpp
index 920c27873d5..b9a5a416212 100644
--- a/src/lib/formats/fsmgr.cpp
+++ b/src/lib/formats/fsmgr.cpp
@@ -7,6 +7,7 @@
#include "fsmgr.h"
+#include "multibyte.h"
#include "strformat.h"
#include <stdexcept>
@@ -124,238 +125,110 @@ const u8 *fsblk_t::iblock_t::rooffset(const char *function, u32 off, u32 size)
void fsblk_t::block_t::copy(u32 offset, const u8 *src, u32 size)
{
- u8 *blk = m_object->offset("copy", offset, size);
- memcpy(blk, src, size);
+ memcpy(m_object->offset("copy", offset, size), src, size);
}
void fsblk_t::block_t::fill(u32 offset, u8 data, u32 size)
{
- u8 *blk = m_object->offset("fill", offset, size);
- memset(blk, data, size);
+ memset(m_object->offset("fill", offset, size), data, size);
}
void fsblk_t::block_t::fill(u8 data)
{
- u8 *blk = m_object->data();
- memset(blk, data, m_object->size());
+ memset(m_object->data(), data, m_object->size());
}
-void fsblk_t::block_t::wstr(u32 offset, const std::string &str)
+void fsblk_t::block_t::wstr(u32 offset, std::string_view str)
{
- u8 *blk = m_object->offset("wstr", offset, str.size());
- memcpy(blk, str.data(), str.size());
+ memcpy(m_object->offset("wstr", offset, str.size()), str.data(), str.size());
}
void fsblk_t::block_t::w8(u32 offset, u8 data)
{
- u8 *blk = m_object->offset("w8", offset, 1);
- blk[0] = data;
+ m_object->offset("w8", offset, 1)[0] = data;
}
void fsblk_t::block_t::w16b(u32 offset, u16 data)
{
- u8 *blk = m_object->offset("w16b", offset, 2);
- blk[0] = data >> 8;
- blk[1] = data;
+ put_u16be(m_object->offset("w16b", offset, 2), data);
}
void fsblk_t::block_t::w24b(u32 offset, u32 data)
{
- u8 *blk = m_object->offset("w24b", offset, 3);
- blk[0] = data >> 16;
- blk[1] = data >> 8;
- blk[2] = data;
+ put_u24be(m_object->offset("w24b", offset, 3), data);
}
void fsblk_t::block_t::w32b(u32 offset, u32 data)
{
- u8 *blk = m_object->offset("w32b", offset, 4);
- blk[0] = data >> 24;
- blk[1] = data >> 16;
- blk[2] = data >> 8;
- blk[3] = data;
+ put_u32be(m_object->offset("w32b", offset, 4), data);
}
void fsblk_t::block_t::w16l(u32 offset, u16 data)
{
- u8 *blk = m_object->offset("w16l", offset, 2);
- blk[0] = data;
- blk[1] = data >> 8;
+ put_u16le(m_object->offset("w16l", offset, 2), data);
}
void fsblk_t::block_t::w24l(u32 offset, u32 data)
{
- u8 *blk = m_object->offset("w24l", offset, 3);
- blk[0] = data;
- blk[1] = data >> 8;
- blk[2] = data >> 16;
+ put_u24le(m_object->offset("w24l", offset, 3), data);
}
void fsblk_t::block_t::w32l(u32 offset, u32 data)
{
- u8 *blk = m_object->offset("w32l", offset, 4);
- blk[0] = data;
- blk[1] = data >> 8;
- blk[2] = data >> 16;
- blk[3] = data >> 24;
+ put_u32le(m_object->offset("w32l", offset, 4), data);
}
-std::string fsblk_t::block_t::rstr(u32 offset, u32 size) const
+std::string_view fsblk_t::block_t::rstr(u32 offset, u32 size) const
{
const u8 *d = m_object->rooffset("rstr", offset, size);
- return std::string(d, d + size);
+ return std::string_view(reinterpret_cast<const char *>(d), size);
}
u8 fsblk_t::block_t::r8(u32 offset) const
{
- const u8 *blk = m_object->offset("r8", offset, 1);
- return blk[0];
+ return m_object->offset("r8", offset, 1)[0];
}
u16 fsblk_t::block_t::r16b(u32 offset) const
{
- const u8 *blk = m_object->offset("r16b", offset, 2);
- return (blk[0] << 8) | blk[1];
+ return get_u16be(m_object->offset("r16b", offset, 2));
}
u32 fsblk_t::block_t::r24b(u32 offset) const
{
- const u8 *blk = m_object->offset("r24b", offset, 3);
- return (blk[0] << 16) | (blk[1] << 8) | blk[2];
+ return get_u24be(m_object->offset("r24b", offset, 3));
}
u32 fsblk_t::block_t::r32b(u32 offset) const
{
- const u8 *blk = m_object->offset("r32b", offset, 4);
- return (blk[0] << 24) | (blk[1] << 16) | (blk[2] << 8) | blk[3];
+ return get_u32be(m_object->offset("r32b", offset, 4));
}
u16 fsblk_t::block_t::r16l(u32 offset) const
{
- const u8 *blk = m_object->offset("r16l", offset, 2);
- return blk[0] | (blk[1] << 8);
+ return get_u16le(m_object->offset("r16l", offset, 2));
}
u32 fsblk_t::block_t::r24l(u32 offset) const
{
- const u8 *blk = m_object->offset("r24l", offset, 3);
- return blk[0] | (blk[1] << 8) | (blk[2] << 16);
+ return get_u24le(m_object->offset("r24l", offset, 3));
}
u32 fsblk_t::block_t::r32l(u32 offset) const
{
- const u8 *blk = m_object->offset("r32l", offset, 4);
- return blk[0] | (blk[1] << 8) | (blk[2] << 16) | (blk[3] << 24);
+ return get_u32le(m_object->offset("r32l", offset, 4));
}
-void filesystem_t::copy(u8 *p, const u8 *src, u32 size)
-{
- memcpy(p, src, size);
-}
-
-void filesystem_t::fill(u8 *p, u8 data, u32 size)
-{
- memset(p, data, size);
-}
-
-void filesystem_t::wstr(u8 *p, const std::string &str)
+void filesystem_t::wstr(u8 *p, std::string_view str)
{
memcpy(p, str.data(), str.size());
}
-void filesystem_t::w8(u8 *p, u8 data)
-{
- p[0] = data;
-}
-
-void filesystem_t::w16b(u8 *p, u16 data)
-{
- p[0] = data >> 8;
- p[1] = data;
-}
-
-void filesystem_t::w24b(u8 *p, u32 data)
-{
- p[0] = data >> 16;
- p[1] = data >> 8;
- p[2] = data;
-}
-
-void filesystem_t::w32b(u8 *p, u32 data)
-{
- p[0] = data >> 24;
- p[1] = data >> 16;
- p[2] = data >> 8;
- p[3] = data;
-}
-
-void filesystem_t::w16l(u8 *p, u16 data)
-{
- p[0] = data;
- p[1] = data >> 8;
-}
-
-void filesystem_t::w24l(u8 *p, u32 data)
-{
- p[0] = data;
- p[1] = data >> 8;
- p[2] = data >> 16;
-}
-
-void filesystem_t::w32l(u8 *p, u32 data)
-{
- p[0] = data;
- p[1] = data >> 8;
- p[2] = data >> 16;
- p[3] = data >> 24;
-}
-
-std::string filesystem_t::rstr(const u8 *p, u32 size)
-{
- return std::string(p, p + size);
-}
-
-u8 filesystem_t::r8(const u8 *p)
-{
- return p[0];
-}
-
-u16 filesystem_t::r16b(const u8 *p)
-{
- return (p[0] << 8) | p[1];
-}
-
-u32 filesystem_t::r24b(const u8 *p)
-{
- return (p[0] << 16) | (p[1] << 8) | p[2];
-}
-
-u32 filesystem_t::r32b(const u8 *p)
-{
- return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
-}
-
-u16 filesystem_t::r16l(const u8 *p)
-{
- return p[0] | (p[1] << 8);
-}
-
-u32 filesystem_t::r24l(const u8 *p)
-{
- return p[0] | (p[1] << 8) | (p[2] << 16);
-}
-
-u32 filesystem_t::r32l(const u8 *p)
-{
- return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);
-}
-
-std::string filesystem_t::trim_end_spaces(const std::string &str)
+std::string_view filesystem_t::rstr(const u8 *p, u32 size)
{
- const auto i = str.find_last_not_of(' ');
- return str.substr(0, (std::string::npos != i) ? (i + 1) : 0);
+ return std::string_view(reinterpret_cast<const char *>(p), size);
}
meta_data filesystem_t::volume_metadata()