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:
+2
-4
@@ -3746,8 +3746,7 @@ code = '''
|
||||
goto corrupt_mounted;
|
||||
}
|
||||
int err = lfsr_file_sync(&lfs, &sim_files[j]->file);
|
||||
assert(err == ((!sim_files[j]->zombie) ? 0 : LFS_ERR_NOENT)
|
||||
|| err == LFS_ERR_NOSPC);
|
||||
assert(err == 0 || err == LFS_ERR_NOSPC);
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
goto corrupt_mounted;
|
||||
}
|
||||
@@ -4345,8 +4344,7 @@ code = '''
|
||||
goto corrupt_mounted;
|
||||
}
|
||||
int err = lfsr_file_sync(&lfs, &sim_files[j]->file);
|
||||
assert(err == ((!sim_files[j]->zombie) ? 0 : LFS_ERR_NOENT)
|
||||
|| err == LFS_ERR_NOSPC);
|
||||
assert(err == 0 || err == LFS_ERR_NOSPC);
|
||||
if (err == LFS_ERR_NOSPC) {
|
||||
goto corrupt_mounted;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user