From b9dfe01903f14f1967fc76d9241052f140f3b91d Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Tue, 14 Jun 2016 07:15:55 +0800 Subject: [PATCH] Fix SPIFFS.openDir("") (#2143) * Update spiffs_api.cpp Fixes a bug where un-prefixed files are irretrievable with openDir(""). Described: https://github.com/esp8266/Arduino/issues/1818. * Update FS test cases --- cores/esp8266/spiffs_api.cpp | 4 ++-- tests/host/fs/test_fs.cpp | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/cores/esp8266/spiffs_api.cpp b/cores/esp8266/spiffs_api.cpp index 5420174a9..c8a05df06 100644 --- a/cores/esp8266/spiffs_api.cpp +++ b/cores/esp8266/spiffs_api.cpp @@ -63,9 +63,9 @@ bool SPIFFSImpl::exists(const char* path) return rc == SPIFFS_OK; } -DirImplPtr SPIFFSImpl::openDir(const char* path) +DirImplPtr SPIFFSImpl::openDir(const char* path) { - if (!isSpiffsFilenameValid(path)) { + if (strlen(path) > 0 && !isSpiffsFilenameValid(path)) { DEBUGV("SPIFFSImpl::openDir: invalid path=`%s` \r\n", path); return DirImplPtr(); } diff --git a/tests/host/fs/test_fs.cpp b/tests/host/fs/test_fs.cpp index ad5e9fd65..6e14af84f 100644 --- a/tests/host/fs/test_fs.cpp +++ b/tests/host/fs/test_fs.cpp @@ -160,11 +160,10 @@ TEST_CASE("File names which are too long are rejected", "[fs]") REQUIRE(SPIFFS.open(longName_31, "w")); REQUIRE(SPIFFS.open(longName_31, "r")); REQUIRE(SPIFFS.exists(longName_31)); - auto files = listDir(""); - REQUIRE(files.empty()); } -TEST_CASE("#1685 Duplicate files", "[fs][bugreport]") { +TEST_CASE("#1685 Duplicate files", "[fs][bugreport]") +{ SPIFFS_MOCK_DECLARE(64, 8, 512); REQUIRE(SPIFFS.begin()); createFile("/config", "some text"); @@ -173,3 +172,15 @@ TEST_CASE("#1685 Duplicate files", "[fs][bugreport]") { createFile("/data", "more text"); listDir("/"); } + +TEST_CASE("#1819 Can list all files with openDir(\"\")", "[fs][bugreport]") +{ + SPIFFS_MOCK_DECLARE(64, 8, 512); + REQUIRE(SPIFFS.begin()); + createFile("/file1", "some text"); + createFile("/file2", "other text"); + createFile("file3", "more text"); + createFile("sorta-dir/file4", "\n"); + auto files = listDir(""); + REQUIRE(files.size() == 4); +}