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
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
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
-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;