extern crate tempfile; extern crate openat; use std::io::{self, Read, Write}; use std::os::unix::fs::PermissionsExt; use openat::Dir; #[test] #[cfg(target_os="linux")] fn unnamed_tmp_file_link() -> Result<(), io::Error> { let tmp = tempfile::tempdir()?; let dir = Dir::open(tmp.path())?; let mut f = dir.new_unnamed_file(0o777)?; f.write(b"hello\n")?; // In glibc <= 2.22 permissions aren't set when using O_TMPFILE // This includes ubuntu trusty on travis CI f.set_permissions(PermissionsExt::from_mode(0o644))?; dir.link_file_at(&f, "hello.txt")?; let mut f = dir.open_file("hello.txt")?; let mut buf = String::with_capacity(10); f.read_to_string(&mut buf)?; assert_eq!(buf, "hello\n"); Ok(()) }