From 0c8dbef887e8a968213e8f5e23a74b2c9fef916f Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 17 Sep 2023 14:08:30 -0400 Subject: [PATCH] fsmgr.cpp: Restore trim_end_spaces as a std::string_view function and use it in place of strtrimrightspace in FS code due to feedback on f5066881db7a601ba7031fbc996ab404e05e5dd5 --- src/lib/formats/fs_coco_rsdos.cpp | 5 ++--- src/lib/formats/fs_fat.cpp | 11 +++++------ src/lib/formats/fs_vtech.cpp | 5 ++--- src/lib/formats/fsmgr.cpp | 6 ++++++ src/lib/formats/fsmgr.h | 2 ++ 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/lib/formats/fs_coco_rsdos.cpp b/src/lib/formats/fs_coco_rsdos.cpp index c5ab89036a4..16642aa15a0 100644 --- a/src/lib/formats/fs_coco_rsdos.cpp +++ b/src/lib/formats/fs_coco_rsdos.cpp @@ -10,7 +10,6 @@ #include "fs_coco_rsdos.h" #include "coco_rawdsk.h" -#include "util/corestr.h" #include "util/strformat.h" #include @@ -415,8 +414,8 @@ meta_data coco_rsdos_impl::get_metadata_from_dirent(const rsdos_dirent &dirent) std::string coco_rsdos_impl::get_filename_from_dirent(const rsdos_dirent &dirent) { - std::string_view stem = strtrimrightspace(std::string_view(&dirent.m_filename[0], 8)); - std::string_view ext = strtrimrightspace(std::string_view(&dirent.m_filename[8], 3)); + std::string_view stem = trim_end_spaces(std::string_view(&dirent.m_filename[0], 8)); + std::string_view ext = trim_end_spaces(std::string_view(&dirent.m_filename[8], 3)); return util::string_format("%s.%s", stem, ext); } diff --git a/src/lib/formats/fs_fat.cpp b/src/lib/formats/fs_fat.cpp index 15977d72b0a..990ce7b4fe0 100644 --- a/src/lib/formats/fs_fat.cpp +++ b/src/lib/formats/fs_fat.cpp @@ -142,9 +142,8 @@ #include "fs_fat.h" #include "pc_dsk.h" + #include "strformat.h" -#include "util/corestr.h" -#include "util/strformat.h" using namespace fs; @@ -449,8 +448,8 @@ std::unique_ptr fs::fat_image::mount_partition(fsblk_t &blockdev, std::string directory_entry::name() const { - std::string_view stem = strtrimrightspace(raw_stem()); - std::string_view ext = strtrimrightspace(raw_ext()); + std::string_view stem = filesystem_t::trim_end_spaces(raw_stem()); + std::string_view ext = filesystem_t::trim_end_spaces(raw_ext()); return !ext.empty() ? util::string_format("%s.%s", stem, ext) : std::string(stem); @@ -711,8 +710,8 @@ void impl::iterate_directory_entries(const directory_span &dir, const std::funct if (dirent.raw_stem()[0] != 0x00) { // get the filename - std::string_view stem = strtrimrightspace(dirent.raw_stem()); - std::string_view ext = strtrimrightspace(dirent.raw_ext()); + std::string_view stem = trim_end_spaces(dirent.raw_stem()); + std::string_view ext = trim_end_spaces(dirent.raw_ext()); if (ext.empty() && (stem == "." || stem == "..")) continue; diff --git a/src/lib/formats/fs_vtech.cpp b/src/lib/formats/fs_vtech.cpp index 970d5fb6556..cea8d4c15fa 100644 --- a/src/lib/formats/fs_vtech.cpp +++ b/src/lib/formats/fs_vtech.cpp @@ -6,7 +6,6 @@ #include "fs_vtech.h" #include "vt_dsk.h" -#include "corestr.h" #include "multibyte.h" #include @@ -142,7 +141,7 @@ meta_data vtech_impl::file_metadata(const u8 *entry) { meta_data res; - res.set(meta_name::name, strtrimrightspace(rstr(entry+2, 8))); + res.set(meta_name::name, trim_end_spaces(rstr(entry+2, 8))); res.set(meta_name::basic, entry[0] == 'T'); res.set(meta_name::loading_address, get_u16le(entry + 0xc)); res.set(meta_name::length, ((get_u16le(entry + 0xe) - get_u16le(entry + 0xc) + 1) & 0xffff)); @@ -161,7 +160,7 @@ std::tuple vtech_impl::file_find(std::string_view name) continue; if(bdir.r8(off+1) != ':') continue; - if(strtrimrightspace(bdir.rstr(off+2, 8)) == name) { + if(trim_end_spaces(bdir.rstr(off+2, 8)) == name) { return std::make_tuple(bdir, i); } } diff --git a/src/lib/formats/fsmgr.cpp b/src/lib/formats/fsmgr.cpp index b9a5a416212..a5c0d89ee71 100644 --- a/src/lib/formats/fsmgr.cpp +++ b/src/lib/formats/fsmgr.cpp @@ -231,6 +231,12 @@ std::string_view filesystem_t::rstr(const u8 *p, u32 size) return std::string_view(reinterpret_cast(p), size); } +std::string_view filesystem_t::trim_end_spaces(std::string_view str) +{ + const auto i = str.find_last_not_of(' '); + return str.substr(0, (std::string::npos != i) ? (i + 1) : 0); +} + meta_data filesystem_t::volume_metadata() { return meta_data(); diff --git a/src/lib/formats/fsmgr.h b/src/lib/formats/fsmgr.h index 9ca9cfd8438..2f7c0cf6be6 100644 --- a/src/lib/formats/fsmgr.h +++ b/src/lib/formats/fsmgr.h @@ -257,6 +257,8 @@ public: static std::string_view rstr(const u8 *p, u32 size); + static std::string_view trim_end_spaces(std::string_view str); + protected: filesystem_t(fsblk_t &blockdev, u32 size) : m_blockdev(blockdev) { m_blockdev.set_block_size(size);