diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2024-02-11 03:53:12 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2024-02-11 08:49:52 +0100 |
commit | 0de0eb1fe18949a328b9e76a2dbf6319692cc3cb (patch) | |
tree | 069235056b38d320e4693bf1d1b89fbda17c058b /loader/atlas.cpp | |
parent | c40f3dc1505439acd34b5fff12ea0a570920f98d (diff) |
wip loader
Diffstat (limited to 'loader/atlas.cpp')
-rw-r--r-- | loader/atlas.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/loader/atlas.cpp b/loader/atlas.cpp index b64efde2..b283fa87 100644 --- a/loader/atlas.cpp +++ b/loader/atlas.cpp @@ -14,14 +14,17 @@ namespace floormat { -StringView loader_::make_atlas_path(char(&buf)[fm_FILENAME_MAX], StringView dir, StringView name) +StringView loader_::make_atlas_path(char(&buf)[fm_FILENAME_MAX], StringView dir, StringView name, StringView ext) { fm_soft_assert(!dir || dir[dir.size()-1] == '/'); - const auto dirsiz = dir.size(), namesiz = name.size(); - fm_soft_assert(dirsiz + namesiz + 1 < fm_FILENAME_MAX); - std::memcpy(buf, dir.data(), dirsiz); - std::memcpy(&buf[dirsiz], name.data(), namesiz); - auto len = dirsiz + namesiz; + fm_soft_assert(name); + fm_soft_assert(!ext || ext[0] == '.'); + const auto dirsiz = dir.size(), namesiz = name.size(), extsiz = ext.size(), + len = dirsiz + namesiz + extsiz; + fm_soft_assert(len < fm_FILENAME_MAX); + std::memcpy(&buf[0], dir.data(), dirsiz ); + std::memcpy(&buf[dirsiz], name.data(), namesiz); + std::memcpy(&buf[dirsiz + namesiz], ext.data(), extsiz ); buf[len] = '\0'; return StringView{buf, len, StringViewFlag::NullTerminated}; } |