Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/littlefs-project/littlefs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lfs.c
diff options
context:
space:
mode:
authorChristopher Haster <geky@geky.net>2023-04-18 22:56:46 +0300
committerChristopher Haster <geky@geky.net>2023-04-18 23:10:07 +0300
commitb33a5b3f856db91e556bc13ad4b7a6c86f75e892 (patch)
treed99eef526b4f6ec3c561602c887d0bf0ffd5c128 /lfs.c
parent384a498762dada6a7a3b1d3c91beaa8db412eb5a (diff)
Fixed issue where seeking to end-of-directory return LFS_ERR_INVAL
This was just an oversight. Seeking to the end of the directory should not error, but instead restore the directory to the state where the next read returns 0. Note this matches the behavior of lfs_file_tell/lfs_file_seek. Found by sosthene-nitrokey
Diffstat (limited to 'lfs.c')
-rw-r--r--lfs.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/lfs.c b/lfs.c
index 26280fa..239ad87 100644
--- a/lfs.c
+++ b/lfs.c
@@ -2595,11 +2595,6 @@ static int lfs_dir_rawseek(lfs_t *lfs, lfs_dir_t *dir, lfs_off_t off) {
dir->id = (off > 0 && lfs_pair_cmp(dir->head, lfs->root) == 0);
while (off > 0) {
- int diff = lfs_min(dir->m.count - dir->id, off);
- dir->id += diff;
- dir->pos += diff;
- off -= diff;
-
if (dir->id == dir->m.count) {
if (!dir->m.split) {
return LFS_ERR_INVAL;
@@ -2612,6 +2607,11 @@ static int lfs_dir_rawseek(lfs_t *lfs, lfs_dir_t *dir, lfs_off_t off) {
dir->id = 0;
}
+
+ int diff = lfs_min(dir->m.count - dir->id, off);
+ dir->id += diff;
+ dir->pos += diff;
+ off -= diff;
}
return 0;