about summary refs log tree commit diff
diff options
context:
space:
mode:
-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)
 }