fixes indicate eof properly #104

This commit is contained in:
Peter Andersson
2017-02-28 08:17:41 +01:00
parent 1b7a1c9fea
commit 2384200ca9
4 changed files with 57 additions and 5 deletions
+10 -1
View File
@@ -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;
+2 -2
View File
@@ -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;
+43
View File
@@ -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)
+2 -2
View File
@@ -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;
}