cap_primitives/rustix/fs/
read_link_unchecked.rs

1use rustix::fs::readlinkat;
2use std::ffi::OsString;
3#[cfg(unix)]
4use std::os::unix::ffi::OsStringExt;
5#[cfg(target_os = "wasi")]
6use std::os::wasi::ffi::OsStringExt;
7use std::path::{Path, PathBuf};
8use std::{fs, io};
9
10/// *Unsandboxed* function similar to `read_link`, but which does not perform
11/// sandboxing.
12pub(crate) fn read_link_unchecked(
13    start: &fs::File,
14    path: &Path,
15    reuse: PathBuf,
16) -> io::Result<PathBuf> {
17    Ok(readlinkat(start, path, reuse.into_os_string().into_vec())
18        .map(|path| OsString::from_vec(path.into_bytes()).into())?)
19}