Sfoglia il codice sorgente

Updated file.rs

Added checks to `file.rs` to ensure that file's metadata exists after `UNIX_EPOCH`.
If the file was accessed/modified/created after UNIX_EPOCH, the current day is displayed.
Brennan McDonald 6 anni fa
parent
commit
f19f7be726
1 ha cambiato i file con 19 aggiunte e 4 eliminazioni
  1. 19 4
      src/fs/file.rs

+ 19 - 4
src/fs/file.rs

@@ -5,7 +5,7 @@ use std::io::Error as IOError;
 use std::io::Result as IOResult;
 use std::io::Result as IOResult;
 use std::os::unix::fs::{MetadataExt, PermissionsExt, FileTypeExt};
 use std::os::unix::fs::{MetadataExt, PermissionsExt, FileTypeExt};
 use std::path::{Path, PathBuf};
 use std::path::{Path, PathBuf};
-use std::time::{UNIX_EPOCH, Duration};
+use std::time::{SystemTime, UNIX_EPOCH, Duration};
 
 
 use fs::dir::Dir;
 use fs::dir::Dir;
 use fs::fields as f;
 use fs::fields as f;
@@ -327,8 +327,13 @@ impl<'dir> File<'dir> {
     }
     }
 
 
     /// This file’s last modified timestamp.
     /// This file’s last modified timestamp.
+    /// If the file's time is invalid, assume it was modified today
     pub fn modified_time(&self) -> Duration {
     pub fn modified_time(&self) -> Duration {
-        self.metadata.modified().unwrap().duration_since(UNIX_EPOCH).unwrap()
+        if self.metadata.modified().unwrap() < UNIX_EPOCH {
+            return SystemTime::now().duration_since(UNIX_EPOCH).unwrap()
+        } else {
+            return self.metadata.created().unwrap().duration_since(UNIX_EPOCH).unwrap()
+        }
     }
     }
 
 
     /// This file’s last changed timestamp.
     /// This file’s last changed timestamp.
@@ -337,13 +342,23 @@ impl<'dir> File<'dir> {
     }
     }
 
 
     /// This file’s last accessed timestamp.
     /// This file’s last accessed timestamp.
+    /// If the file's time is invalid, assume it was accessed today
     pub fn accessed_time(&self) -> Duration {
     pub fn accessed_time(&self) -> Duration {
-        self.metadata.accessed().unwrap().duration_since(UNIX_EPOCH).unwrap()
+        if self.metadata.modified().unwrap() < UNIX_EPOCH{
+            return SystemTime::now().duration_since(UNIX_EPOCH).unwrap()
+        } else {
+            return self.metadata.created().unwrap().duration_since(UNIX_EPOCH).unwrap()
+        }
     }
     }
 
 
     /// This file’s created timestamp.
     /// This file’s created timestamp.
+    /// If the file's time is invalid, assume it was created today
     pub fn created_time(&self) -> Duration {
     pub fn created_time(&self) -> Duration {
-        self.metadata.created().unwrap().duration_since(UNIX_EPOCH).unwrap()
+        if self.metadata.modified().unwrap() < UNIX_EPOCH {
+            return SystemTime::now().duration_since(UNIX_EPOCH).unwrap()
+        } else {
+            return self.metadata.created().unwrap().duration_since(UNIX_EPOCH).unwrap()
+        }
     }
     }
 
 
     /// This file’s ‘type’.
     /// This file’s ‘type’.