@@ -79,9 +79,10 @@ fdb_err_t _fdb_file_read(fdb_db_t db, uint32_t addr, void *buf, size_t size)
79
79
fdb_err_t result = FDB_NO_ERR ;
80
80
int fd = open_db_file (db , addr , false);
81
81
if (fd > 0 ) {
82
+ /* get the offset address is relative to the start of the current file */
82
83
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 ;
85
86
} else {
86
87
result = FDB_READ_ERR ;
87
88
}
@@ -93,16 +94,16 @@ fdb_err_t _fdb_file_write(fdb_db_t db, uint32_t addr, const void *buf, size_t si
93
94
fdb_err_t result = FDB_NO_ERR ;
94
95
int fd = open_db_file (db , addr , false);
95
96
if (fd > 0 ) {
97
+ /* get the offset address is relative to the start of the current file */
96
98
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 ;
99
101
if (sync ) {
100
102
fsync (fd );
101
103
}
102
104
} else {
103
105
result = FDB_WRITE_ERR ;
104
106
}
105
-
106
107
return result ;
107
108
}
108
109
@@ -166,8 +167,8 @@ fdb_err_t _fdb_file_read(fdb_db_t db, uint32_t addr, void *buf, size_t size)
166
167
FILE * fp = open_db_file (db , addr , false);
167
168
if (fp ) {
168
169
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 ;
171
172
} else {
172
173
result = FDB_READ_ERR ;
173
174
}
@@ -180,8 +181,8 @@ fdb_err_t _fdb_file_write(fdb_db_t db, uint32_t addr, const void *buf, size_t si
180
181
FILE * fp = open_db_file (db , addr , false);
181
182
if (fp ) {
182
183
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 ;
185
186
if (sync ) {
186
187
fflush (fp );
187
188
}
0 commit comments