Skip to content

Commit 42663b8

Browse files
Reimplement SD.h write methods exactly in File
Replace the individual override with the existing SD.h File's implementation for all methods of File::write.
1 parent 192aaa4 commit 42663b8

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

cores/esp8266/FS.h

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,29 @@ class File : public Stream
8080
bool isDirectory() const;
8181

8282
// Arduino "class SD" methods for compatibility
83-
size_t write(const char *str) { return write((const uint8_t*)str, strlen(str)); }
83+
template<typename T> size_t write(T &src){
84+
uint8_t obuf[512];
85+
size_t doneLen = 0;
86+
size_t sentLen;
87+
int i;
88+
89+
while (src.available() > 512){
90+
src.read(obuf, 512);
91+
sentLen = write(obuf, 512);
92+
doneLen = doneLen + sentLen;
93+
if(sentLen != 512){
94+
return doneLen;
95+
}
96+
}
97+
98+
size_t leftLen = src.available();
99+
src.read(obuf, leftLen);
100+
sentLen = write(obuf, leftLen);
101+
doneLen = doneLen + sentLen;
102+
return doneLen;
103+
}
104+
using Print::write;
105+
84106
void rewindDirectory();
85107
File openNextFile();
86108

tests/host/fs/test_fs.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,3 +331,18 @@ TEST_CASE("Listfiles.ino example", "[sd]")
331331
REQUIRE(readFileSD("/dir2/dir3/file4") == "bonjour");
332332
}
333333

334+
TEST_CASE("Multisplendored File::writes", "[fs]")
335+
{
336+
SDFS_MOCK_DECLARE();
337+
SDFS.end();
338+
SDFS.setConfig(SDFSConfig(0, SD_SCK_MHZ(1)));
339+
REQUIRE(SDFS.format());
340+
REQUIRE(SD.begin(4));
341+
342+
File f = SD.open("/file.txt", FILE_WRITE);
343+
f.write('a');
344+
f.write(65);
345+
f.write("bbcc");
346+
f.close();
347+
REQUIRE(readFileSD("/file.txt") == "aAbbcc");
348+
}

0 commit comments

Comments
 (0)