Skip to content

Commit

Permalink
Fixed issue where seeking to end-of-directory return LFS_ERR_INVAL
Browse files Browse the repository at this point in the history
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
  • Loading branch information
geky committed Apr 18, 2023
1 parent 384a498 commit b33a5b3
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions lfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down

0 comments on commit b33a5b3

Please sign in to comment.