mirror of
https://github.com/eledio-devices/thirdparty-littlefs.git
synced 2025-11-01 00:38:29 +01:00
Before this patch, when calling lfs_mkdir or lfs_file_open with root as the target, littlefs wouldn't find the path properly and happily run into undefined behaviour. The fix is to populate a directory entry for root in the lfs_dir_find function. As an added plus, this allowed several special cases around root to be completely dropped.
128 lines
3.8 KiB
Bash
Executable File
128 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
set -eu
|
|
|
|
echo "=== Path tests ==="
|
|
rm -rf blocks
|
|
tests/test.py << TEST
|
|
lfs_format(&lfs, &cfg) => 0;
|
|
TEST
|
|
|
|
tests/test.py << TEST
|
|
lfs_mount(&lfs, &cfg) => 0;
|
|
lfs_mkdir(&lfs, "tea") => 0;
|
|
lfs_mkdir(&lfs, "coffee") => 0;
|
|
lfs_mkdir(&lfs, "soda") => 0;
|
|
lfs_mkdir(&lfs, "tea/hottea") => 0;
|
|
lfs_mkdir(&lfs, "tea/warmtea") => 0;
|
|
lfs_mkdir(&lfs, "tea/coldtea") => 0;
|
|
lfs_mkdir(&lfs, "coffee/hotcoffee") => 0;
|
|
lfs_mkdir(&lfs, "coffee/warmcoffee") => 0;
|
|
lfs_mkdir(&lfs, "coffee/coldcoffee") => 0;
|
|
lfs_mkdir(&lfs, "soda/hotsoda") => 0;
|
|
lfs_mkdir(&lfs, "soda/warmsoda") => 0;
|
|
lfs_mkdir(&lfs, "soda/coldsoda") => 0;
|
|
lfs_unmount(&lfs) => 0;
|
|
TEST
|
|
|
|
echo "--- Root path tests ---"
|
|
tests/test.py << TEST
|
|
lfs_mount(&lfs, &cfg) => 0;
|
|
lfs_stat(&lfs, "tea/hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
lfs_stat(&lfs, "/tea/hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
|
|
lfs_mkdir(&lfs, "/milk1") => 0;
|
|
lfs_stat(&lfs, "/milk1", &info) => 0;
|
|
strcmp(info.name, "milk1") => 0;
|
|
lfs_unmount(&lfs) => 0;
|
|
TEST
|
|
|
|
echo "--- Redundant slash path tests ---"
|
|
tests/test.py << TEST
|
|
lfs_mount(&lfs, &cfg) => 0;
|
|
lfs_stat(&lfs, "/tea/hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
lfs_stat(&lfs, "//tea//hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
lfs_stat(&lfs, "///tea///hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
|
|
lfs_mkdir(&lfs, "///milk2") => 0;
|
|
lfs_stat(&lfs, "///milk2", &info) => 0;
|
|
strcmp(info.name, "milk2") => 0;
|
|
lfs_unmount(&lfs) => 0;
|
|
TEST
|
|
|
|
echo "--- Dot path tests ---"
|
|
tests/test.py << TEST
|
|
lfs_mount(&lfs, &cfg) => 0;
|
|
lfs_stat(&lfs, "./tea/hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
lfs_stat(&lfs, "/./tea/hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
lfs_stat(&lfs, "/././tea/hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
lfs_stat(&lfs, "/./tea/./hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
|
|
lfs_mkdir(&lfs, "/./milk3") => 0;
|
|
lfs_stat(&lfs, "/./milk3", &info) => 0;
|
|
strcmp(info.name, "milk3") => 0;
|
|
lfs_unmount(&lfs) => 0;
|
|
TEST
|
|
|
|
echo "--- Dot dot path tests ---"
|
|
tests/test.py << TEST
|
|
lfs_mount(&lfs, &cfg) => 0;
|
|
lfs_stat(&lfs, "coffee/../tea/hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
lfs_stat(&lfs, "tea/coldtea/../hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
lfs_stat(&lfs, "coffee/coldcoffee/../../tea/hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
lfs_stat(&lfs, "coffee/../soda/../tea/hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
|
|
lfs_mkdir(&lfs, "coffee/../milk4") => 0;
|
|
lfs_stat(&lfs, "coffee/../milk4", &info) => 0;
|
|
strcmp(info.name, "milk4") => 0;
|
|
lfs_unmount(&lfs) => 0;
|
|
TEST
|
|
|
|
echo "--- Root dot dot path tests ---"
|
|
tests/test.py << TEST
|
|
lfs_mount(&lfs, &cfg) => 0;
|
|
lfs_stat(&lfs, "coffee/../../../../../../tea/hottea", &info) => 0;
|
|
strcmp(info.name, "hottea") => 0;
|
|
|
|
lfs_mkdir(&lfs, "coffee/../../../../../../milk5") => 0;
|
|
lfs_stat(&lfs, "coffee/../../../../../../milk5", &info) => 0;
|
|
strcmp(info.name, "milk5") => 0;
|
|
lfs_unmount(&lfs) => 0;
|
|
TEST
|
|
|
|
echo "--- Root tests ---"
|
|
tests/test.py << TEST
|
|
lfs_mount(&lfs, &cfg) => 0;
|
|
lfs_stat(&lfs, "/", &info) => 0;
|
|
info.type => LFS_TYPE_DIR;
|
|
strcmp(info.name, "/") => 0;
|
|
|
|
lfs_mkdir(&lfs, "/") => LFS_ERR_EXIST;
|
|
lfs_file_open(&lfs, &file[0], "/", LFS_O_WRONLY | LFS_O_CREAT)
|
|
=> LFS_ERR_ISDIR;
|
|
lfs_unmount(&lfs) => 0;
|
|
TEST
|
|
|
|
echo "--- Sketchy path tests ---"
|
|
tests/test.py << TEST
|
|
lfs_mount(&lfs, &cfg) => 0;
|
|
lfs_mkdir(&lfs, "dirt/ground") => LFS_ERR_NOENT;
|
|
lfs_mkdir(&lfs, "dirt/ground/earth") => LFS_ERR_NOENT;
|
|
lfs_unmount(&lfs) => 0;
|
|
TEST
|
|
|
|
echo "--- Results ---"
|
|
tests/stats.py
|