From bcc5acb0bd2376ed70044b84f75fdae53966e367 Mon Sep 17 00:00:00 2001 From: "James Truher [MSFT]" Date: Thu, 12 Dec 2019 12:25:16 -0800 Subject: [PATCH] Fix for issue on raspbian for setting date of file changes in UnixStat Experimental Feature (#11313) --- .../CoreCLR/CorePsPlatform.cs | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs b/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs index dfa5ff300f..30e9c2b1f3 100644 --- a/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs +++ b/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs @@ -864,9 +864,36 @@ namespace System.Management.Automation cs.GroupId = css.GroupId; cs.HardlinkCount = css.HardlinkCount; cs.Size = css.Size; - cs.AccessTime = DateTime.UnixEpoch.AddSeconds(css.AccessTime).ToLocalTime(); - cs.ModifiedTime = DateTime.UnixEpoch.AddSeconds(css.ModifiedTime).ToLocalTime(); - cs.StatusChangeTime = DateTime.UnixEpoch.AddSeconds(css.StatusChangeTime).ToLocalTime(); + + // These can sometime throw if we get too large a number back (seen on Raspbian). + // As a fallback, set the time to UnixEpoch. + try + { + cs.AccessTime = DateTime.UnixEpoch.AddSeconds(css.AccessTime).ToLocalTime(); + } + catch + { + cs.AccessTime = DateTime.UnixEpoch.ToLocalTime(); + } + + try + { + cs.ModifiedTime = DateTime.UnixEpoch.AddSeconds(css.ModifiedTime).ToLocalTime(); + } + catch + { + cs.ModifiedTime = DateTime.UnixEpoch.ToLocalTime(); + } + + try + { + cs.StatusChangeTime = DateTime.UnixEpoch.AddSeconds(css.StatusChangeTime).ToLocalTime(); + } + catch + { + cs.StatusChangeTime = DateTime.UnixEpoch.ToLocalTime(); + } + cs.BlockSize = css.BlockSize; cs.DeviceId = css.DeviceId; cs.NumberOfBlocks = css.NumberOfBlocks;