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