M module-vfs/drivers/include/purefs/fs/drivers/mount_point_littlefs.hpp => module-vfs/drivers/include/purefs/fs/drivers/mount_point_littlefs.hpp +1 -1
@@ 30,7 30,7 @@ namespace purefs::fs::drivers
private:
auto native_root() const noexcept -> std::string_view override
{
- return "/";
+ return "";
}
struct lfs_config m_lfs_conf
{};
M module-vfs/include/internal/purefs/fs/mount_point.hpp => module-vfs/include/internal/purefs/fs/mount_point.hpp +4 -1
@@ 48,7 48,10 @@ namespace purefs::fs::internal
{
const auto n1 = full_path.find(m_path);
if (n1 == 0) {
- return std::string(native_root()).append(full_path.substr(m_path.size()));
+ auto ret = std::string(native_root()).append(full_path.substr(m_path.size()));
+ if (ret.empty())
+ ret.append("/");
+ return ret;
}
else {
return {};
M module-vfs/tests/genlfstestimg.sh => module-vfs/tests/genlfstestimg.sh +2 -2
@@ 37,7 37,7 @@ sfdisk $IMAGE_FILE << ==sfdisk
label: dos
unit: sectors
-/dev/sdz1 : start= 2048, size=$SECTOR_END, type=9e, bootable
+/dev/sdz1 : start=$SECTOR_START, size=$SECTOR_END, type=9e
==sfdisk
-./genlittlefs --image $IMAGE_FILE --block_size=4096 --overwrite --partition_num 1 -- assets/*
+./genlittlefs --image $IMAGE_FILE --block_size=4096 --overwrite --partition_num 1 -- assets/* .boot.json
M module-vfs/tests/unittest_filesystem_littlefs.cpp => module-vfs/tests/unittest_filesystem_littlefs.cpp +59 -0
@@ 43,3 43,62 @@ TEST_CASE("Littlefs: Basic mount and functionality")
ret = fscore.umount("/path");
REQUIRE(ret == 0);
}
+
+TEST_CASE("littlefs: Basic API test")
+{
+ using namespace purefs;
+ auto dm = std::make_shared<blkdev::disk_manager>();
+ auto disk = std::make_shared<blkdev::disk_image>(disk_image);
+ REQUIRE(disk);
+ REQUIRE(dm->register_device(disk, "emmc0") == 0);
+ purefs::fs::filesystem fscore(dm);
+ const auto vfs_vfat = std::make_shared<fs::drivers::filesystem_littlefs>();
+ REQUIRE(vfs_vfat->mount_count() == 0);
+ auto ret = fscore.register_filesystem("littlefs", vfs_vfat);
+ REQUIRE(ret == 0);
+ // List partitions
+ for (const auto &part : dm->partitions("emmc0")) {
+ std::cout << part.name << " " << part.bootable << std::endl;
+ }
+ ret = fscore.mount("emmc0part0", "/sys", "littlefs");
+ REQUIRE(ret == 0);
+ {
+ struct statvfs ssv;
+ ret = fscore.stat_vfs("/sys/", ssv);
+ REQUIRE(ret == 0);
+ }
+ {
+ ret = fscore.open("/sys/ala/ma/kota/", 0, 0);
+ REQUIRE(ret == -ENOENT);
+ // Simple file test
+ int hwnd = fscore.open("/sys/.boot.json", 0, 0);
+ REQUIRE(hwnd >= 3);
+ std::cout << "File open handle " << hwnd << std::endl;
+ struct stat st;
+ ret = fscore.fstat(hwnd, st);
+ REQUIRE(ret == 0);
+ std::cout << "File size " << st.st_size << std::endl;
+ char buf[4096]{};
+ ret = fscore.read(hwnd, buf, sizeof buf);
+ REQUIRE(ret > 0);
+ ret = fscore.close(hwnd);
+ REQUIRE(ret == 0);
+ {
+ // Simple directory test
+ auto dirhandle = fscore.diropen("/sys");
+ REQUIRE(dirhandle);
+ REQUIRE(dirhandle->error() == 0);
+ for (std::string fnm;;) {
+ if (fscore.dirnext(dirhandle, fnm, st) != 0) {
+ break;
+ }
+ else {
+ std::cout << "name " << fnm << " size " << st.st_size << std::endl;
+ }
+ }
+ fscore.dirclose(dirhandle);
+ }
+ ret = fscore.umount("/sys");
+ REQUIRE(ret == 0);
+ }
+}