diff --git a/cores/esp8266/FileSystem.cpp b/cores/esp8266/FileSystem.cpp index 7e42af06b..f2517cf98 100755 --- a/cores/esp8266/FileSystem.cpp +++ b/cores/esp8266/FileSystem.cpp @@ -21,41 +21,46 @@ #include "FileSystem.h" #include "Arduino.h" -boolean FSClass::mount(){ - if(_mounted) return true; +bool FSClass::mount() { + if (_mounted) + return true; + _mounted = spiffs_mount(); return _mounted; } -void FSClass::unmount(){ - if(!_mounted) return; +void FSClass::unmount() { + if (!_mounted) + return; + spiffs_unmount(); _mounted = false; } -boolean FSClass::format(){ +bool FSClass::format() { return spiffs_format(); } -boolean FSClass::exists(const char *filename){ +bool FSClass::exists(const char *filename) { spiffs_stat stat = {0}; - if (SPIFFS_stat(&_filesystemStorageHandle, filename, &stat) < 0) return false; + if (SPIFFS_stat(&_filesystemStorageHandle, filename, &stat) < 0) + return false; return stat.name[0] != '\0'; } -boolean FSClass::create(const char *filepath){ +bool FSClass::create(const char *filepath){ return SPIFFS_creat(&_filesystemStorageHandle, filepath, 0) == 0; } -boolean FSClass::remove(const char *filepath){ +bool FSClass::remove(const char *filepath){ return SPIFFS_remove(&_filesystemStorageHandle, filepath) == 0; } -boolean FSClass::rename(const char *filename, const char *newname){ +bool FSClass::rename(const char *filename, const char *newname) { return SPIFFS_rename(&_filesystemStorageHandle, filename, newname) == 0; } -FSFile FSClass::open(const char *filename, uint8_t mode){ +FSFile FSClass::open(const char *filename, uint8_t mode) { int repeats = 0; bool notExist; bool canRecreate = (mode & SPIFFS_CREAT) == SPIFFS_CREAT; @@ -81,25 +86,25 @@ FSFile FSClass::open(const char *filename, uint8_t mode){ FSClass FS; -FSFile::FSFile(){ +FSFile::FSFile() { _file = 0; _stats = {0}; } -FSFile::FSFile(file_t f){ +FSFile::FSFile(file_t f) { _file = f; if(SPIFFS_fstat(&_filesystemStorageHandle, _file, &_stats) != 0){ debugf("mount errno %d\n", SPIFFS_errno(&_filesystemStorageHandle)); } } -void FSFile::close(){ +void FSFile::close() { if (! _file) return; SPIFFS_close(&_filesystemStorageHandle, _file); _file = 0; } -uint32_t FSFile::size(){ +uint32_t FSFile::size() { if(! _file) return 0; uint32_t pos = SPIFFS_tell(&_filesystemStorageHandle, _file); SPIFFS_lseek(&_filesystemStorageHandle, _file, 0, SPIFFS_SEEK_END); @@ -108,31 +113,31 @@ uint32_t FSFile::size(){ return size; } -uint32_t FSFile::seek(uint32_t pos){ +uint32_t FSFile::seek(uint32_t pos) { if (! _file) return 0; return SPIFFS_lseek(&_filesystemStorageHandle, _file, pos, SPIFFS_SEEK_SET); } -uint32_t FSFile::position(){ +uint32_t FSFile::position() { if (! _file) return 0; return SPIFFS_tell(&_filesystemStorageHandle, _file); } -boolean FSFile::eof(){ +bool FSFile::eof() { if (! _file) return 0; return SPIFFS_eof(&_filesystemStorageHandle, _file); } -boolean FSFile::isDirectory(void){ +bool FSFile::isDirectory(void) { return false; } -int FSFile::read(void *buf, uint16_t nbyte){ +int FSFile::read(void *buf, uint16_t nbyte) { if (! _file) return -1; return SPIFFS_read(&_filesystemStorageHandle, _file, buf, nbyte); } -int FSFile::read(){ +int FSFile::read() { if (! _file) return -1; int val; if(SPIFFS_read(&_filesystemStorageHandle, _file, &val, 1) != 1) return -1; diff --git a/cores/esp8266/FileSystem.h b/cores/esp8266/FileSystem.h index 8704f260c..d675da114 100755 --- a/cores/esp8266/FileSystem.h +++ b/cores/esp8266/FileSystem.h @@ -29,7 +29,7 @@ class String; #define FSFILE_WRITE (SPIFFS_RDONLY | SPIFFS_WRONLY | SPIFFS_CREAT | SPIFFS_APPEND | SPIFFS_TRUNC) class FSFile : public Stream { - private: +private: spiffs_stat _stats; file_t _file; @@ -47,34 +47,29 @@ public: uint32_t remove(); uint32_t position(); uint32_t size(); - boolean eof(); + bool eof(); void close(); int lastError(); void clearError(); - operator bool(){ return _file > 0; } + operator bool() { return _file > 0; } char * name(); - boolean isDirectory(void); + bool isDirectory(void); template size_t write(T &src){ - uint8_t obuf[64]; - size_t doneLen = 0; - size_t sentLen; - int i; - - while (src.available() > 64){ - src.read(obuf, 64); - sentLen = write(obuf, 64); - doneLen = doneLen + sentLen; - if(sentLen != 64){ - return doneLen; + const size_t bufferSize = 64; + uint8_t obuf[bufferSize]; + size_t bytesWritten = 0; + while (true){ + size_t available = src.available(); + size_t willWrite = (available < bufferSize) ? available : bufferSize; + src.read(obuf, willWrite); + size_t cb = write(obuf, willWrite); + bytesWritten += cb; + if (cb != willWrite) { + return bytesWritten; } } - - size_t leftLen = src.available(); - src.read(obuf, leftLen); - sentLen = write(obuf, leftLen); - doneLen = doneLen + sentLen; - return doneLen; + return bytesWritten; } using Print::write; @@ -83,16 +78,16 @@ public: class FSClass { private: - boolean _mounted; + bool _mounted; public: - boolean mount(); + bool mount(); void unmount(); - boolean format(); - boolean exists(const char *filename); - boolean create(const char *filepath); - boolean remove(const char *filepath); - boolean rename(const char *filename, const char *newname); + bool format(); + bool exists(const char *filename); + bool create(const char *filepath); + bool remove(const char *filepath); + bool rename(const char *filename, const char *newname); FSFile open(const char *filename, uint8_t mode = FSFILE_READ); diff --git a/cores/esp8266/spiffs/spiffs.h b/cores/esp8266/spiffs/spiffs.h index ad922b4a8..6357b44a7 100755 --- a/cores/esp8266/spiffs/spiffs.h +++ b/cores/esp8266/spiffs/spiffs.h @@ -12,8 +12,6 @@ extern "C" { #endif -//#include "c_stdio.h" -#include #include "spiffs_config.h" #include "flashmem.h"