From c70e59965977df97d1134f0dcadb9cd4ed58139f Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 31 Aug 2020 14:25:20 +1000 Subject: extmod/vfs: Support larger integer range in VFS stat time fields. On ports like unix where the Epoch is 1970/1/1 and atime/mtime/ctime are in seconds since the Epoch, this value will overflow a small-int on 32-bit systems. So far this is only an issue on 32-bit unix builds that use the VFS layer (eg dev and coverage unix variants) but the fix (using mp_obj_new_int_from_uint instead of MP_OBJ_NEW_SMALL_INT) is there for all ports so as to not complicate the code, and because they will need the range one day. Also apply a similar fix to other fields in VfsPosix.stat because they may also be large. Signed-off-by: Damien George --- extmod/vfs_lfsx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'extmod/vfs_lfsx.c') diff --git a/extmod/vfs_lfsx.c b/extmod/vfs_lfsx.c index 511b741b0d..9f5d9ce6db 100644 --- a/extmod/vfs_lfsx.c +++ b/extmod/vfs_lfsx.c @@ -377,9 +377,9 @@ STATIC mp_obj_t MP_VFS_LFSx(stat)(mp_obj_t self_in, mp_obj_t path_in) { t->items[4] = MP_OBJ_NEW_SMALL_INT(0); // st_uid t->items[5] = MP_OBJ_NEW_SMALL_INT(0); // st_gid t->items[6] = mp_obj_new_int_from_uint(info.size); // st_size - t->items[7] = MP_OBJ_NEW_SMALL_INT(mtime); // st_atime - t->items[8] = MP_OBJ_NEW_SMALL_INT(mtime); // st_mtime - t->items[9] = MP_OBJ_NEW_SMALL_INT(mtime); // st_ctime + t->items[7] = mp_obj_new_int_from_uint(mtime); // st_atime + t->items[8] = mp_obj_new_int_from_uint(mtime); // st_mtime + t->items[9] = mp_obj_new_int_from_uint(mtime); // st_ctime return MP_OBJ_FROM_PTR(t); } -- cgit v1.2.3