fix(storage/spiffs): fix readdir setting errno on directory end

spiffs_res_to_errno maps `SPIFFS_ERR_END_OF_OBJECT` to EIO which breaks the common contract where
errno should be 0 if readdir iterated through all the entries in a directory.

The fix is explicitly checking for `SPIFFS_ERR_END_OF_OBJECT` and in that case set errno to 0.
This commit is contained in:
Augusto Zanellato
2025-10-29 20:13:30 +01:00
committed by sonika.rathi
parent 97013a5166
commit 1aa0d7fd2a
+9 -1
View File
@@ -746,7 +746,15 @@ static int vfs_spiffs_readdir_r(void* ctx, DIR* pdir, struct dirent* entry,
char * item_name;
do {
if (SPIFFS_readdir(&dir->d, &out) == 0) {
errno = spiffs_res_to_errno(SPIFFS_errno(efs->fs));
s32_t spiffs_res = SPIFFS_errno(efs->fs);
switch (spiffs_res) {
case SPIFFS_ERR_END_OF_OBJECT:
errno = 0;
break;
default:
errno = spiffs_res_to_errno(spiffs_res);
break;
}
SPIFFS_clearerr(efs->fs);
if (!errno) {
*out_dirent = NULL;