diff --git a/ext/fs/std_fs.rs b/ext/fs/std_fs.rs index 47e71446d9..e05fbb8cbf 100644 --- a/ext/fs/std_fs.rs +++ b/ext/fs/std_fs.rs @@ -895,7 +895,7 @@ fn stat_extra( let result = get_dev(file_handle); fsstat.dev = result?; - fsstat.ctime = Some(get_change_time(file_handle).unwrap()); + fsstat.ctime = get_change_time(file_handle).ok(); CloseHandle(file_handle); diff --git a/ext/io/fs.rs b/ext/io/fs.rs index a9550f6b8f..a3c19226ac 100644 --- a/ext/io/fs.rs +++ b/ext/io/fs.rs @@ -155,6 +155,16 @@ impl FsStat { } } + #[inline(always)] + fn get_ctime(ctime_or_0: i64) -> Option { + if ctime_or_0 > 0 { + // ctime return seconds since epoch, but we need milliseconds + return Some(ctime_or_0 as u64 * 1000); + } + + None + } + Self { is_file: metadata.is_file(), is_directory: metadata.is_dir(), @@ -164,7 +174,7 @@ impl FsStat { mtime: to_msec(metadata.modified()), atime: to_msec(metadata.accessed()), birthtime: to_msec(metadata.created()), - ctime: Some(unix_or_zero!(ctime) as u64 * 1000), + ctime: get_ctime(unix_or_zero!(ctime)), dev: unix_or_zero!(dev), ino: unix_or_zero!(ino),