Merge pull request #937 from littlefs-project/fix-pending-rm-get-underflow
Fix synthetic move underflows in lfs_dir_get
This commit is contained in:
@@ -710,12 +710,15 @@ static lfs_stag_t lfs_dir_getslice(lfs_t *lfs, const lfs_mdir_t *dir,
|
|||||||
lfs_tag_t ntag = dir->etag;
|
lfs_tag_t ntag = dir->etag;
|
||||||
lfs_stag_t gdiff = 0;
|
lfs_stag_t gdiff = 0;
|
||||||
|
|
||||||
if (lfs_gstate_hasmovehere(&lfs->gdisk, dir->pair) &&
|
|
||||||
lfs_tag_id(gmask) != 0 &&
|
|
||||||
lfs_tag_id(lfs->gdisk.tag) <= lfs_tag_id(gtag)) {
|
|
||||||
// synthetic moves
|
// synthetic moves
|
||||||
|
if (lfs_gstate_hasmovehere(&lfs->gdisk, dir->pair) &&
|
||||||
|
lfs_tag_id(gmask) != 0) {
|
||||||
|
if (lfs_tag_id(lfs->gdisk.tag) == lfs_tag_id(gtag)) {
|
||||||
|
return LFS_ERR_NOENT;
|
||||||
|
} else if (lfs_tag_id(lfs->gdisk.tag) < lfs_tag_id(gtag)) {
|
||||||
gdiff -= LFS_MKTAG(0, 1, 0);
|
gdiff -= LFS_MKTAG(0, 1, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// iterate over dir block backwards (for faster lookups)
|
// iterate over dir block backwards (for faster lookups)
|
||||||
while (off >= sizeof(lfs_tag_t) + lfs_tag_dsize(ntag)) {
|
while (off >= sizeof(lfs_tag_t) + lfs_tag_dsize(ntag)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user