1b8a62b91Sopenharmony_ciuse crate::fd::OwnedFd; 2b8a62b91Sopenharmony_ciuse crate::{backend, io, path}; 3b8a62b91Sopenharmony_ciuse backend::fd::AsFd; 4b8a62b91Sopenharmony_ciuse backend::fs::types::{Mode, OFlags, ResolveFlags}; 5b8a62b91Sopenharmony_ci 6b8a62b91Sopenharmony_ci/// `openat2(dirfd, path, OpenHow { oflags, mode, resolve }, sizeof(OpenHow))` 7b8a62b91Sopenharmony_ci/// 8b8a62b91Sopenharmony_ci/// # References 9b8a62b91Sopenharmony_ci/// - [Linux] 10b8a62b91Sopenharmony_ci/// 11b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/openat2.2.html 12b8a62b91Sopenharmony_ci#[inline] 13b8a62b91Sopenharmony_cipub fn openat2<Fd: AsFd, P: path::Arg>( 14b8a62b91Sopenharmony_ci dirfd: Fd, 15b8a62b91Sopenharmony_ci path: P, 16b8a62b91Sopenharmony_ci oflags: OFlags, 17b8a62b91Sopenharmony_ci mode: Mode, 18b8a62b91Sopenharmony_ci resolve: ResolveFlags, 19b8a62b91Sopenharmony_ci) -> io::Result<OwnedFd> { 20b8a62b91Sopenharmony_ci path.into_with_c_str(|path| { 21b8a62b91Sopenharmony_ci backend::fs::syscalls::openat2(dirfd.as_fd(), path, oflags, mode, resolve) 22b8a62b91Sopenharmony_ci }) 23b8a62b91Sopenharmony_ci} 24