diff options
author | Damien George <damien@micropython.org> | 2020-08-31 14:25:20 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2020-09-01 12:36:28 +1000 |
commit | c70e59965977df97d1134f0dcadb9cd4ed58139f (patch) | |
tree | d7131bc7784067efd8521441b0495a587f3991bd /extmod/vfs_fat.c | |
parent | 40153b800a8324f6cf3e47dd71cafcf90c3c4718 (diff) |
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 <damien@micropython.org>
Diffstat (limited to 'extmod/vfs_fat.c')
-rw-r--r-- | extmod/vfs_fat.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/extmod/vfs_fat.c b/extmod/vfs_fat.c index e7af4057b..79b0fc119 100644 --- a/extmod/vfs_fat.c +++ b/extmod/vfs_fat.c @@ -326,9 +326,9 @@ STATIC mp_obj_t fat_vfs_stat(mp_obj_t vfs_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(fno.fsize); // st_size - t->items[7] = MP_OBJ_NEW_SMALL_INT(seconds); // st_atime - t->items[8] = MP_OBJ_NEW_SMALL_INT(seconds); // st_mtime - t->items[9] = MP_OBJ_NEW_SMALL_INT(seconds); // st_ctime + t->items[7] = mp_obj_new_int_from_uint(seconds); // st_atime + t->items[8] = mp_obj_new_int_from_uint(seconds); // st_mtime + t->items[9] = mp_obj_new_int_from_uint(seconds); // st_ctime return MP_OBJ_FROM_PTR(t); } |