mirror of
https://github.com/pellepl/spiffs.git
synced 2026-07-28 14:37:48 +00:00
fixes indicate eof properly #104
This commit is contained in:
+10
-1
@@ -356,7 +356,7 @@ spiffs_file SPIFFS_open_by_page(spiffs *fs, spiffs_page_ix page_ix, spiffs_flags
|
||||
return SPIFFS_FH_OFFS(fs, fd->file_nbr);
|
||||
}
|
||||
|
||||
s32_t SPIFFS_read(spiffs *fs, spiffs_file fh, void *buf, s32_t len) {
|
||||
static s32_t spiffs_hydro_read(spiffs *fs, spiffs_file fh, void *buf, s32_t len) {
|
||||
SPIFFS_API_CHECK_CFG(fs);
|
||||
SPIFFS_API_CHECK_MOUNT(fs);
|
||||
SPIFFS_LOCK(fs);
|
||||
@@ -410,6 +410,15 @@ s32_t SPIFFS_read(spiffs *fs, spiffs_file fh, void *buf, s32_t len) {
|
||||
return len;
|
||||
}
|
||||
|
||||
s32_t SPIFFS_read(spiffs *fs, spiffs_file fh, void *buf, s32_t len) {
|
||||
s32_t res = spiffs_hydro_read(fs, fh, buf, len);
|
||||
if (res == SPIFFS_ERR_END_OF_OBJECT) {
|
||||
res = 0;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
#if !SPIFFS_READ_ONLY
|
||||
static s32_t spiffs_hydro_write(spiffs *fs, spiffs_fd *fd, void *buf, u32_t offset, s32_t len) {
|
||||
(void)fs;
|
||||
|
||||
@@ -343,7 +343,7 @@ TEST(zero_sized_file_44) {
|
||||
|
||||
u8_t buf[8];
|
||||
res = SPIFFS_read(FS, fd, buf, 8);
|
||||
TEST_CHECK_LT(res, 0);
|
||||
TEST_CHECK_EQ(res, 0);
|
||||
TEST_CHECK_EQ(SPIFFS_errno(FS), SPIFFS_ERR_END_OF_OBJECT);
|
||||
|
||||
res = SPIFFS_read(FS, fd, buf, 0);
|
||||
@@ -371,7 +371,7 @@ TEST(zero_sized_file_44) {
|
||||
TEST_CHECK_EQ(b, 2);
|
||||
|
||||
res = SPIFFS_read(FS, fd, buf, 8);
|
||||
TEST_CHECK_LT(res, 0);
|
||||
TEST_CHECK_EQ(res, 0);
|
||||
TEST_CHECK_EQ(SPIFFS_errno(FS), SPIFFS_ERR_END_OF_OBJECT);
|
||||
|
||||
return TEST_RES_OK;
|
||||
|
||||
@@ -1290,6 +1290,48 @@ TEST(read_beyond)
|
||||
}
|
||||
TEST_END
|
||||
|
||||
TEST(read_beyond2)
|
||||
{
|
||||
char *name = "file";
|
||||
spiffs_file fd;
|
||||
s32_t res;
|
||||
const s32_t size = SPIFFS_DATA_PAGE_SIZE(FS);
|
||||
|
||||
u8_t buf[size*2];
|
||||
memrand(buf, size);
|
||||
|
||||
res = test_create_file(name);
|
||||
CHECK(res >= 0);
|
||||
fd = SPIFFS_open(FS, name, SPIFFS_APPEND | SPIFFS_RDWR, 0);
|
||||
CHECK(fd >= 0);
|
||||
res = SPIFFS_write(FS, fd, buf, size);
|
||||
CHECK(res >= 0);
|
||||
|
||||
spiffs_stat stat;
|
||||
res = SPIFFS_fstat(FS, fd, &stat);
|
||||
CHECK(res >= 0);
|
||||
CHECK(stat.size == size);
|
||||
|
||||
SPIFFS_close(FS, fd);
|
||||
|
||||
int i,j;
|
||||
for (j = 1; j <= size+1; j++) {
|
||||
fd = SPIFFS_open(FS, name, SPIFFS_RDONLY, 0);
|
||||
CHECK(fd >= 0);
|
||||
SPIFFS_clearerr(FS);
|
||||
for (i = 0; i < size * 2; i += j) {
|
||||
u8_t dst;
|
||||
res = SPIFFS_read(FS, fd, buf, j);
|
||||
TEST_CHECK_EQ(SPIFFS_errno(FS), i < size ? SPIFFS_OK : SPIFFS_ERR_END_OF_OBJECT);
|
||||
TEST_CHECK_EQ(res, MIN(j, MAX(0, size - (i + j) + j)));
|
||||
}
|
||||
SPIFFS_close(FS, fd);
|
||||
}
|
||||
|
||||
return TEST_RES_OK;
|
||||
}
|
||||
TEST_END
|
||||
|
||||
|
||||
TEST(bad_index_1) {
|
||||
int size = SPIFFS_DATA_PAGE_SIZE(FS)*3;
|
||||
@@ -2410,6 +2452,7 @@ SUITE_TESTS(hydrogen_tests)
|
||||
ADD_TEST(read_chunk_index)
|
||||
ADD_TEST(read_chunk_huge)
|
||||
ADD_TEST(read_beyond)
|
||||
ADD_TEST(read_beyond2)
|
||||
ADD_TEST(bad_index_1)
|
||||
ADD_TEST(bad_index_2)
|
||||
ADD_TEST(lseek_simple_modification)
|
||||
|
||||
@@ -841,10 +841,10 @@ u32_t get_spiffs_file_crc_by_fd(spiffs_file fd) {
|
||||
|
||||
ASSERT(SPIFFS_lseek(FS, fd, 0, SPIFFS_SEEK_SET) >= 0, "could not seek to start of file");
|
||||
|
||||
while ((res = SPIFFS_read(FS, fd, buf, sizeof(buf))) >= SPIFFS_OK) {
|
||||
while ((res = SPIFFS_read(FS, fd, buf, sizeof(buf))) > SPIFFS_OK) {
|
||||
crc = crc32(crc, buf, res);
|
||||
}
|
||||
ASSERT(res == SPIFFS_ERR_END_OF_OBJECT || res == SPIFFS_OK, "failed reading file");
|
||||
ASSERT(SPIFFS_errno(FS) == SPIFFS_ERR_END_OF_OBJECT || SPIFFS_errno(FS) == SPIFFS_OK, "failed reading file");
|
||||
|
||||
return crc;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user