From 1239341b0db07abc7387e43d00d179120dc5e90d Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 1 Jun 2022 12:03:32 +0200 Subject: [PATCH] fix SPIFFS_readdir setting errno to SPIFFS_VIS_END When iteration finishes, spiffs_obj_lu_find_entry_visitor returns SPIFFS_VIS_END. Previously, SPIFFS_readdir function used to set errno to this internal error value when readdir reached the end. Handle this case and add a check into the regression test. --- src/spiffs_hydrogen.c | 2 ++ src/test/test_hydrogen.c | 1 + 2 files changed, 3 insertions(+) diff --git a/src/spiffs_hydrogen.c b/src/spiffs_hydrogen.c index bfeb3cf..7b3e0ae 100644 --- a/src/spiffs_hydrogen.c +++ b/src/spiffs_hydrogen.c @@ -1121,6 +1121,8 @@ struct spiffs_dirent *SPIFFS_readdir(spiffs_DIR *d, struct spiffs_dirent *e) { d->entry = entry + 1; e->obj_id &= ~SPIFFS_OBJ_ID_IX_FLAG; ret = e; + } else if (res == SPIFFS_VIS_END) { + // end of iteration } else { d->fs->err_code = res; } diff --git a/src/test/test_hydrogen.c b/src/test/test_hydrogen.c index 72aea74..84d3139 100644 --- a/src/test/test_hydrogen.c +++ b/src/test/test_hydrogen.c @@ -439,6 +439,7 @@ TEST(list_dir) #endif } } + TEST_CHECK_EQ(SPIFFS_errno(FS), SPIFFS_OK); SPIFFS_closedir(&d); TEST_CHECK(found == file_cnt);