Skip to content

Commit 8608140

Browse files
committed
[fdb] check some read error for file mode
1 parent 55fd31e commit 8608140

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

src/fdb_file.c

+10-9
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,10 @@ fdb_err_t _fdb_file_read(fdb_db_t db, uint32_t addr, void *buf, size_t size)
7979
fdb_err_t result = FDB_NO_ERR;
8080
int fd = open_db_file(db, addr, false);
8181
if (fd > 0) {
82+
/* get the offset address is relative to the start of the current file */
8283
addr = addr % db->sec_size;
83-
lseek(fd, addr, SEEK_SET);
84-
read(fd, buf, size);
84+
if ((lseek(fd, addr, SEEK_SET) != addr) || (read(fd, buf, size) != size))
85+
result = FDB_READ_ERR;
8586
} else {
8687
result = FDB_READ_ERR;
8788
}
@@ -93,16 +94,16 @@ fdb_err_t _fdb_file_write(fdb_db_t db, uint32_t addr, const void *buf, size_t si
9394
fdb_err_t result = FDB_NO_ERR;
9495
int fd = open_db_file(db, addr, false);
9596
if (fd > 0) {
97+
/* get the offset address is relative to the start of the current file */
9698
addr = addr % db->sec_size;
97-
lseek(fd, addr, SEEK_SET);
98-
write(fd, buf, size);
99+
if ((lseek(fd, addr, SEEK_SET) != addr) || (write(fd, buf, size) != size))
100+
result = FDB_WRITE_ERR;
99101
if(sync) {
100102
fsync(fd);
101103
}
102104
} else {
103105
result = FDB_WRITE_ERR;
104106
}
105-
106107
return result;
107108
}
108109

@@ -166,8 +167,8 @@ fdb_err_t _fdb_file_read(fdb_db_t db, uint32_t addr, void *buf, size_t size)
166167
FILE *fp = open_db_file(db, addr, false);
167168
if (fp) {
168169
addr = addr % db->sec_size;
169-
fseek(fp, addr, SEEK_SET);
170-
fread(buf, size, 1, fp);
170+
if ((fseek(fp, addr, SEEK_SET) != 0) || (fread(buf, size, 1, fp) != size))
171+
result = FDB_READ_ERR;
171172
} else {
172173
result = FDB_READ_ERR;
173174
}
@@ -180,8 +181,8 @@ fdb_err_t _fdb_file_write(fdb_db_t db, uint32_t addr, const void *buf, size_t si
180181
FILE *fp = open_db_file(db, addr, false);
181182
if (fp) {
182183
addr = addr % db->sec_size;
183-
fseek(fp, addr, SEEK_SET);
184-
fwrite(buf, size, 1, fp);
184+
if ((fseek(fp, addr, SEEK_SET) != 0) || (fwrite(buf, size, 1, fp) != size))
185+
result = FDB_READ_ERR;
185186
if(sync) {
186187
fflush(fp);
187188
}

0 commit comments

Comments
 (0)