Made lfsr_file_sync a noop if zombied
So now calling lfsr_file_sync on zombied files is a noop:
// create a file
lfsr_file_t a;
lfsr_file_open(&lfs, &a, "a",
LFS_O_RDWR | LFS_O_CREAT | LFS_O_EXCL) => 0;
// remove, creating a zombie
lfsr_remove(&lfs, "a") => 0;
// sync, this is now a noop (previously LFS_ERR_NOENT)
lfsr_file_sync(&lfs, &a) => 0;
// close is also a noop
lfsr_file_close(&lfs, &a) => 0;
I've been on the fence on this for a while, on one hand erroring
provides more information to the user, on the other hand a noop is less
surprising if the user comes from other systems.
Ended up making this a noop. I figured minimizing surprises is good API
design, and the user can always use lfsr_stat to check if the file still
exists.
This also matches POSIX, and, perhaps more importantly, the current
version of littlefs.
---
Note that lfsr_file_resync still errors with LFS_ERR_NOENT. It's hard to
argue the file "matches the state of disk" otherwise.
Code changes minimal:
code stack ctx
before: 35784 2440 640
after: 35780 (-0.0%) 2440 (+0.0%) 640 (+0.0%)
This commit is contained in:
@@ -12721,11 +12721,10 @@ int lfsr_file_sync(lfs_t *lfs, lfsr_file_t *file) {
|
||||
// lfsr_file_resync
|
||||
LFS_ASSERT(!lfsr_o_isrdonly(file->b.o.flags));
|
||||
|
||||
// removed? we can't sync
|
||||
// removed? sync is just a noop in this case
|
||||
int err;
|
||||
if (lfsr_o_iszombie(file->b.o.flags)) {
|
||||
err = LFS_ERR_NOENT;
|
||||
goto failed;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// first flush any data in our cache, this is a noop if already
|
||||
|
||||
Reference in New Issue
Block a user