Skip to content

Commit e3e8de3

Browse files
Fix merge errors
1 parent 4acc649 commit e3e8de3

File tree

3 files changed

+67
-68
lines changed

3 files changed

+67
-68
lines changed

tests/host/common/littlefs_mock.cpp

+49-42
Original file line numberDiff line numberDiff line change
@@ -31,31 +31,26 @@
3131
#include <sys/stat.h>
3232
#include <fcntl.h>
3333
#include <unistd.h>
34+
#include "flash_hal_mock.h"
3435

3536
#define LITTLEFS_FILE_NAME "littlefs.bin"
3637

37-
extern "C"
38-
{
39-
extern uint32_t s_phys_size;
40-
extern uint32_t s_phys_page;
41-
extern uint32_t s_phys_block;
42-
extern uint8_t* s_phys_data;
43-
}
44-
4538
FS LittleFS(nullptr);
4639

47-
LittleFSMock::LittleFSMock(size_t fs_size, size_t fs_block, size_t fs_page, bool storage)
40+
LittleFSMock::LittleFSMock(ssize_t fs_size, size_t fs_block, size_t fs_page, const String& storage)
4841
{
49-
fprintf(stderr, "LittleFS: %zd bytes\n", fs_size);
50-
5142
m_storage = storage;
52-
m_fs = new uint8_t[m_fs_size = fs_size];
53-
memset(&m_fs[0], 0xff, m_fs_size);
43+
if ((m_overwrite = (fs_size < 0)))
44+
fs_size = -fs_size;
5445

46+
fprintf(stderr, "LittleFS: %zd bytes\n", fs_size);
47+
48+
m_fs.resize(fs_size, 0xff);
49+
s_phys_addr = 0;
5550
s_phys_size = static_cast<uint32_t>(fs_size);
5651
s_phys_page = static_cast<uint32_t>(fs_page);
5752
s_phys_block = static_cast<uint32_t>(fs_block);
58-
s_phys_data = &m_fs[0];
53+
s_phys_data = m_fs.data();
5954
reset();
6055
}
6156

@@ -68,59 +63,71 @@ void LittleFSMock::reset()
6863

6964
LittleFSMock::~LittleFSMock()
7065
{
71-
if (m_storage)
72-
save();
66+
save();
67+
s_phys_addr = 0;
7368
s_phys_size = 0;
7469
s_phys_page = 0;
7570
s_phys_block = 0;
7671
s_phys_data = nullptr;
77-
delete [] m_fs;
78-
m_fs = nullptr;
79-
m_fs_size = 0;
72+
m_fs.resize(0);
8073
LittleFS = FS(FSImplPtr(nullptr));
8174
}
8275

8376
void LittleFSMock::load ()
8477
{
85-
if (!m_fs_size)
78+
if (!m_fs.size() || !m_storage.length())
8679
return;
87-
88-
const char* fname = getenv("LITTLEFS_PATH");
89-
if (!fname)
90-
fname = DEFAULT_LITTLEFS_FILE_NAME;
91-
int fs = ::open(LITTLEFS_FILE_NAME, O_RDONLY);
80+
81+
int fs = ::open(m_storage.c_str(), O_RDONLY);
9282
if (fs == -1)
9383
{
94-
fprintf(stderr, "LittleFS: loading '%s': %s\n", fname, strerror(errno));
84+
fprintf(stderr, "LittleFS: loading '%s': %s\n", m_storage.c_str(), strerror(errno));
9585
return;
9686
}
97-
fprintf(stderr, "LittleFS: loading %zi bytes from '%s'\n", m_fs_size, fname);
98-
if (::read(fs, &m_fs[0], m_fs_size) != (ssize_t)m_fs_size)
99-
fprintf(stderr, "LittleFS: reading %zi bytes: %s\n", m_fs_size, strerror(errno));
87+
88+
off_t flen = lseek(fs, 0, SEEK_END);
89+
if (flen == (off_t)-1)
90+
{
91+
fprintf(stderr, "LittleFS: checking size of '%s': %s\n", m_storage.c_str(), strerror(errno));
92+
return;
93+
}
94+
lseek(fs, 0, SEEK_SET);
95+
96+
if (flen != (off_t)m_fs.size())
97+
{
98+
fprintf(stderr, "LittleFS: size of '%s': %d does not match requested size %zd\n", m_storage.c_str(), (int)flen, m_fs.size());
99+
if (!m_overwrite)
100+
{
101+
fprintf(stderr, "LittleFS: aborting at user request\n");
102+
exit(1);
103+
}
104+
fprintf(stderr, "LittleFS: continuing without loading at user request, '%s' will be overwritten\n", m_storage.c_str());
105+
}
106+
else
107+
{
108+
fprintf(stderr, "LittleFS: loading %zi bytes from '%s'\n", m_fs.size(), m_storage.c_str());
109+
ssize_t r = ::read(fs, m_fs.data(), m_fs.size());
110+
if (r != (ssize_t)m_fs.size())
111+
fprintf(stderr, "LittleFS: reading %zi bytes: returned %zd: %s\n", m_fs.size(), r, strerror(errno));
112+
}
100113
::close(fs);
101114
}
102115

103116
void LittleFSMock::save ()
104117
{
105-
if (!m_fs_size)
118+
if (!m_fs.size() || !m_storage.length())
106119
return;
107120

108-
const char* fname = getenv("LITTLEFS_PATH");
109-
if (!fname)
110-
fname = DEFAULT_LITTLEFS_FILE_NAME;
111-
int fs = ::open(LITTLEFS_FILE_NAME, O_CREAT | O_TRUNC | O_WRONLY, 0644);
121+
int fs = ::open(m_storage.c_str(), O_CREAT | O_TRUNC | O_WRONLY, 0644);
112122
if (fs == -1)
113123
{
114-
fprintf(stderr, "LittleFS: saving '%s': %s\n", fname, strerror(errno));
124+
fprintf(stderr, "LittleFS: saving '%s': %s\n", m_storage.c_str(), strerror(errno));
115125
return;
116126
}
117-
fprintf(stderr, "LittleFS: saving %zi bytes to '%s'\n", m_fs_size, fname);
118-
119-
// this can be a valgrind error, I don't understand how it happens
120-
//for (size_t i = 0; i < m_fs_size; i++) printf("\r%zd:%d ", i, (int)m_fs[i]);
127+
fprintf(stderr, "LittleFS: saving %zi bytes to '%s'\n", m_fs.size(), m_storage.c_str());
121128

122-
if (::write(fs, &m_fs[0], m_fs_size) != (ssize_t)m_fs_size)
123-
fprintf(stderr, "LittleFS: writing %zi bytes: %s\n", m_fs_size, strerror(errno));
129+
if (::write(fs, m_fs.data(), m_fs.size()) != (ssize_t)m_fs.size())
130+
fprintf(stderr, "LittleFS: writing %zi bytes: %s\n", m_fs.size(), strerror(errno));
124131
if (::close(fs) == -1)
125-
fprintf(stderr, "LittleFS: closing %s: %s\n", fname, strerror(errno));
132+
fprintf(stderr, "LittleFS: closing %s: %s\n", m_storage.c_str(), strerror(errno));
126133
}

tests/host/common/littlefs_mock.h

+4-12
Original file line numberDiff line numberDiff line change
@@ -29,25 +29,17 @@
2929

3030
class LittleFSMock {
3131
public:
32-
LittleFSMock(size_t fs_size, size_t fs_block, size_t fs_page, bool storage = true);
32+
LittleFSMock(ssize_t fs_size, size_t fs_block, size_t fs_page, const String& storage = emptyString);
3333
void reset();
3434
~LittleFSMock();
3535

3636
protected:
3737
void load ();
3838
void save ();
3939

40-
// it was a vector, but CI tests & valgrind complain with:
41-
// Syscall param write(buf) points to uninitialised byte(s)
42-
// by 0x43E9FF: SpiffsMock::save() (littlefs_mock.cpp:116)
43-
// = if (::write(fs, &m_fs[0], m_fs_size) != (ssize_t)m_fs_size)
44-
// so switched to a regular array
45-
// and that bug is still here
46-
// XXXWIPTODO
47-
48-
uint8_t* m_fs;
49-
size_t m_fs_size;
50-
bool m_storage;
40+
std::vector<uint8_t> m_fs;
41+
String m_storage;
42+
bool m_overwrite;
5143
};
5244

5345
#define LITTLEFS_MOCK_DECLARE(size_kb, block_kb, page_b, storage) LittleFSMock littlefs_mock(size_kb * 1024, block_kb * 1024, page_b, storage)

tests/host/fs/test_fs.inc

+14-14
Original file line numberDiff line numberDiff line change
@@ -29,33 +29,33 @@ static std::set<String> listDir (const char* path)
2929

3030
TEST_CASE(TESTPRE "FS can begin",TESTPAT)
3131
{
32-
FS_MOCK_DECLARE(64, 8, 512, false);
32+
FS_MOCK_DECLARE(64, 8, 512, "");
3333
REQUIRE(FSTYPE.begin());
3434
}
3535

3636
TEST_CASE(TESTPRE "FS can't begin with zero size",TESTPAT)
3737
{
38-
FS_MOCK_DECLARE(0, 8, 512, false);
38+
FS_MOCK_DECLARE(0, 8, 512, "");
3939
REQUIRE_FALSE(FSTYPE.begin());
4040
}
4141

4242
TEST_CASE(TESTPRE "Before begin is called, open will fail",TESTPAT)
4343
{
44-
FS_MOCK_DECLARE(64, 8, 512, false);
44+
FS_MOCK_DECLARE(64, 8, 512, "");
4545
REQUIRE_FALSE(FSTYPE.open("/foo", "w"));
4646
}
4747

4848
TEST_CASE(TESTPRE "FS can create file",TESTPAT)
4949
{
50-
FS_MOCK_DECLARE(64, 8, 512, false);
50+
FS_MOCK_DECLARE(64, 8, 512, "");
5151
REQUIRE(FSTYPE.begin());
5252
createFile("/test", "");
5353
REQUIRE(FSTYPE.exists("/test"));
5454
}
5555

5656
TEST_CASE(TESTPRE "Files can be written and appended to",TESTPAT)
5757
{
58-
FS_MOCK_DECLARE(64, 8, 512, false);
58+
FS_MOCK_DECLARE(64, 8, 512, "");
5959
REQUIRE(FSTYPE.begin());
6060
{
6161
File f = FSTYPE.open("config1.txt", "w");
@@ -79,7 +79,7 @@ TEST_CASE(TESTPRE "Files can be written and appended to",TESTPAT)
7979

8080
TEST_CASE(TESTPRE "Files persist after reset", TESTPAT)
8181
{
82-
FS_MOCK_DECLARE(64, 8, 512, false);
82+
FS_MOCK_DECLARE(64, 8, 512, "");
8383
REQUIRE(FSTYPE.begin());
8484
createFile("config1.txt", "file 1");
8585

@@ -91,7 +91,7 @@ TEST_CASE(TESTPRE "Files persist after reset", TESTPAT)
9191

9292
TEST_CASE(TESTPRE "Filesystem is empty after format", TESTPAT)
9393
{
94-
FS_MOCK_DECLARE(64, 8, 512, false);
94+
FS_MOCK_DECLARE(64, 8, 512, "");
9595
REQUIRE(FSTYPE.format());
9696
REQUIRE(FSTYPE.begin());
9797
createFile("/1", "first");
@@ -107,7 +107,7 @@ TEST_CASE(TESTPRE "Filesystem is empty after format", TESTPAT)
107107

108108
TEST_CASE(TESTPRE "File names which are too long are rejected", TESTPAT)
109109
{
110-
FS_MOCK_DECLARE(64, 8, 512, false);
110+
FS_MOCK_DECLARE(64, 8, 512, "");
111111
REQUIRE(FSTYPE.begin());
112112
const char* emptyName = "";
113113
const char* longName_31 = "/234567890123456789012345678901";
@@ -125,7 +125,7 @@ TEST_CASE(TESTPRE "File names which are too long are rejected", TESTPAT)
125125

126126
TEST_CASE(TESTPRE "#1685 Duplicate files", "[fs][bugreport]")
127127
{
128-
FS_MOCK_DECLARE(64, 8, 512, false);
128+
FS_MOCK_DECLARE(64, 8, 512, "");
129129
REQUIRE(FSTYPE.begin());
130130
createFile("/config", "some text");
131131
createFile("/data", "");
@@ -137,7 +137,7 @@ TEST_CASE(TESTPRE "#1685 Duplicate files", "[fs][bugreport]")
137137

138138
TEST_CASE(TESTPRE "#1819 Can list all files with openDir(\"\")", "[fs][bugreport]")
139139
{
140-
FS_MOCK_DECLARE(96, 8, 512, false);
140+
FS_MOCK_DECLARE(96, 8, 512, "");
141141
REQUIRE(FSTYPE.begin());
142142
createFile("/file1", "some text");
143143
createFile("/file2", "other text");
@@ -155,7 +155,7 @@ TEST_CASE(TESTPRE "#1819 Can list all files with openDir(\"\")", "[fs][bugreport
155155
// behavior and expose the FS::mkdir() method, but for now this works OK.
156156
TEST_CASE(TESTPRE "Removing all files in a subdir removes that subdir", TESTPAT)
157157
{
158-
FS_MOCK_DECLARE(128, 8, 512, false);
158+
FS_MOCK_DECLARE(128, 8, 512, "");
159159
REQUIRE(FSTYPE.begin());
160160
createFile("/empty", "");
161161
createFile("/not_empty", "some text");
@@ -191,7 +191,7 @@ TEST_CASE(TESTPRE "Removing all files in a subdir removes that subdir", TESTPAT)
191191
// f.name == "c" and not "/a/b/c" as you would see in SPIFFS.
192192
TEST_CASE(TESTPRE "Dir lists all files", TESTPAT)
193193
{
194-
FS_MOCK_DECLARE(64, 8, 512, false);
194+
FS_MOCK_DECLARE(64, 8, 512, "");
195195
REQUIRE(FSTYPE.begin());
196196
createFile("/empty", "");
197197
createFile("/not_empty", "some text");
@@ -217,7 +217,7 @@ TEST_CASE(TESTPRE "Dir lists all files", TESTPAT)
217217

218218
TEST_CASE(TESTPRE "Listfiles.ino example", TESTPAT)
219219
{
220-
FS_MOCK_DECLARE(128, 8, 512, false);
220+
FS_MOCK_DECLARE(128, 8, 512, "");
221221
REQUIRE(FSTYPE.format());
222222
REQUIRE(FSTYPE.begin());
223223

@@ -265,7 +265,7 @@ TEST_CASE(TESTPRE "Listfiles.ino example", TESTPAT)
265265

266266
TEST_CASE(TESTPRE "Dir lists all files", TESTPAT)
267267
{
268-
FS_MOCK_DECLARE(64, 8, 512, false);
268+
FS_MOCK_DECLARE(64, 8, 512, "");
269269
REQUIRE(FSTYPE.begin());
270270
createFile("/empty", "");
271271
createFile("/not_empty", "some text");

0 commit comments

Comments
 (0)