1use std::fs::File;
2
3use rustix::fs::{cwd, openat, Mode, OFlags};
4use std::io::Write;
5
6#[test]
7fn test_openat_tmpfile() {
8    let tmp = tempfile::tempdir().unwrap();
9    let dir = openat(
10        cwd(),
11        tmp.path(),
12        OFlags::RDONLY | OFlags::CLOEXEC,
13        Mode::empty(),
14    )
15    .unwrap();
16    let f = match openat(
17        &dir,
18        ".",
19        OFlags::WRONLY | OFlags::CLOEXEC | OFlags::TMPFILE,
20        Mode::from_bits_truncate(0o644),
21    ) {
22        Ok(f) => Ok(Some(File::from(f))),
23        // TODO: Factor out the `Err`, once we no longer support Rust 1.48.
24        Err(rustix::io::Errno::OPNOTSUPP)
25        | Err(rustix::io::Errno::ISDIR)
26        | Err(rustix::io::Errno::NOENT) => Ok(None),
27        Err(err) => Err(err),
28    };
29    if let Some(mut f) = f.unwrap() {
30        write!(f, "hello world").unwrap();
31    }
32}
33