lfs_file_truncate: ensure lfs_file_seek return code is lsf_soff_t and cast error returns

To ensure 16 bit devices do not invalidly truncate lfs_file_write return codes, change
the return variable to be lfs_ssize_t which is the lfs_file_write return code and
cast to int if it is a negative error code.
This commit is contained in:
Sipke Vriend
2019-10-01 14:20:43 +10:00
parent 97f86af4e9
commit 8cca58f1a6

18
lfs.c
View File

@@ -3006,10 +3006,10 @@ int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size) {
} else if (size > oldsize) { } else if (size > oldsize) {
// flush+seek if not already at end // flush+seek if not already at end
if (file->pos != oldsize) { if (file->pos != oldsize) {
int err = lfs_file_seek(lfs, file, 0, LFS_SEEK_END); lfs_soff_t res = lfs_file_seek(lfs, file, 0, LFS_SEEK_END);
if (err < 0) { if (res < 0) {
LFS_TRACE("lfs_file_truncate -> %d", err); LFS_TRACE("lfs_file_truncate -> %d", res);
return err; return (int)res;
} }
} }
@@ -3018,16 +3018,16 @@ int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size) {
lfs_ssize_t res = lfs_file_write(lfs, file, &(uint8_t){0}, 1); lfs_ssize_t res = lfs_file_write(lfs, file, &(uint8_t){0}, 1);
if (res < 0) { if (res < 0) {
LFS_TRACE("lfs_file_truncate -> %d", res); LFS_TRACE("lfs_file_truncate -> %d", res);
return res; return (int)res;
} }
} }
} }
// restore pos // restore pos
int err = lfs_file_seek(lfs, file, pos, LFS_SEEK_SET); lfs_soff_t res = lfs_file_seek(lfs, file, pos, LFS_SEEK_SET);
if (err < 0) { if (res < 0) {
LFS_TRACE("lfs_file_truncate -> %d", err); LFS_TRACE("lfs_file_truncate -> %d", res);
return err; return (int)res;
} }
LFS_TRACE("lfs_file_truncate -> %d", 0); LFS_TRACE("lfs_file_truncate -> %d", 0);