diff --git a/cores/esp8266/FS.cpp b/cores/esp8266/FS.cpp index 18eda0c86..030d79f0d 100644 --- a/cores/esp8266/FS.cpp +++ b/cores/esp8266/FS.cpp @@ -41,7 +41,7 @@ int File::available() { if (!_p) return false; - return _p->position() < _p->size(); + return _p->size() - _p->position(); } int File::read() { @@ -112,6 +112,13 @@ File::operator bool() const { return !!_p; } +const char* File::name() const { + if (!_p) + return nullptr; + + return _p->name(); +} + File Dir::openFile(const char* mode) { if (!_impl) { return File(); diff --git a/cores/esp8266/FS.h b/cores/esp8266/FS.h index ce6d220ba..c2b29ba09 100644 --- a/cores/esp8266/FS.h +++ b/cores/esp8266/FS.h @@ -64,6 +64,7 @@ public: size_t size() const; void close(); operator bool() const; + const char* name() const; protected: FileImplPtr _p; diff --git a/cores/esp8266/FSImpl.h b/cores/esp8266/FSImpl.h index 8977e64c0..f11342f12 100644 --- a/cores/esp8266/FSImpl.h +++ b/cores/esp8266/FSImpl.h @@ -33,6 +33,7 @@ public: virtual size_t position() const = 0; virtual size_t size() const = 0; virtual void close() = 0; + virtual const char* name() const = 0; }; enum OpenMode { diff --git a/cores/esp8266/spiffs_api.cpp b/cores/esp8266/spiffs_api.cpp index d63a1bcd4..480755087 100644 --- a/cores/esp8266/spiffs_api.cpp +++ b/cores/esp8266/spiffs_api.cpp @@ -259,6 +259,12 @@ public: DEBUGV("SPIFFS_close: fd=%d\r\n", _fd); } + const char* name() const override { + CHECKFD(); + + return (const char*) _stat.name; + } + protected: SPIFFSImpl* _fs; spiffs_file _fd; @@ -283,10 +289,11 @@ public: return FileImplPtr(); } int mode = getSpiffsMode(openMode, accessMode); - spiffs_file fd = SPIFFS_open_by_dirent(_fs->getFs(), &_dirent, mode, 0); + auto fs = _fs->getFs(); + spiffs_file fd = SPIFFS_open_by_dirent(fs, &_dirent, mode, 0); if (fd < 0) { DEBUGV("SPIFFSDirImpl::openFile: fd=%d path=`%s` openMode=%d accessMode=%d err=%d\r\n", - fd, _dirent.name, openMode, accessMode, _fs.err_code); + fd, _dirent.name, openMode, accessMode, fs->err_code); return FileImplPtr(); } return std::make_shared(_fs, fd);