about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-09-30 05:19:17 +0000
committerbors <bors@rust-lang.org>2015-09-30 05:19:17 +0000
commitc459e897bdf3b3323aa1ad4bb6e174a5bbc402b0 (patch)
tree74d54f9e9f5206d98fb10b6cc6fa889d1679e318 /src/libstd
parent44d404804c85cb80d4f5e32ec7fc3df43f255a14 (diff)
parent6b9b2ee8781ddb3dea00ba156bd3b5b0638c6f43 (diff)
downloadrust-c459e897bdf3b3323aa1ad4bb6e174a5bbc402b0.tar.gz
rust-c459e897bdf3b3323aa1ad4bb6e174a5bbc402b0.zip
Auto merge of #28729 - retep998:canonical-dir, r=alexcrichton
cc https://github.com/rust-lang/rust/issues/27706
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/fs.rs9
-rw-r--r--src/libstd/sys/windows/fs.rs2
2 files changed, 11 insertions, 0 deletions
diff --git a/src/libstd/fs.rs b/src/libstd/fs.rs
index a3d509ba0f1..16bf534563e 100644
--- a/src/libstd/fs.rs
+++ b/src/libstd/fs.rs
@@ -2084,6 +2084,15 @@ mod tests {
     }
 
     #[test]
+    fn canonicalize_works_simple() {
+        let tmpdir = tmpdir();
+        let tmpdir = fs::canonicalize(tmpdir.path()).unwrap();
+        let file = tmpdir.join("test");
+        File::create(&file).unwrap();
+        assert_eq!(fs::canonicalize(&file).unwrap(), file);
+    }
+
+    #[test]
     #[cfg(not(windows))]
     fn realpath_works() {
         let tmpdir = tmpdir();
diff --git a/src/libstd/sys/windows/fs.rs b/src/libstd/sys/windows/fs.rs
index e9d98b36a43..721e259823a 100644
--- a/src/libstd/sys/windows/fs.rs
+++ b/src/libstd/sys/windows/fs.rs
@@ -583,6 +583,8 @@ fn get_path(f: &File) -> io::Result<PathBuf> {
 pub fn canonicalize(p: &Path) -> io::Result<PathBuf> {
     let mut opts = OpenOptions::new();
     opts.read(true);
+    // This flag is so we can open directories too
+    opts.flags_and_attributes(c::FILE_FLAG_BACKUP_SEMANTICS);
     let f = try!(File::open(p, &opts));
     get_path(&f)
 }