Path symlink follow (#1284)
* Fix the tests for correctly following symlinks. * Correctly follow symlinks in path_link.
This commit is contained in:
committed by
GitHub
parent
bcddce5fe0
commit
c50c24e699
@@ -650,7 +650,9 @@ pub(crate) unsafe fn path_link(
|
||||
false,
|
||||
)?;
|
||||
|
||||
hostcalls_impl::path_link(resolved_old, resolved_new)
|
||||
let follow_symlinks = old_flags & wasi::__WASI_LOOKUPFLAGS_SYMLINK_FOLLOW != 0;
|
||||
|
||||
hostcalls_impl::path_link(resolved_old, resolved_new, follow_symlinks)
|
||||
}
|
||||
|
||||
pub(crate) unsafe fn path_open(
|
||||
|
||||
@@ -71,15 +71,24 @@ pub(crate) fn path_create_directory(base: &File, path: &str) -> WasiResult<()> {
|
||||
unsafe { mkdirat(base.as_raw_fd(), path, Mode::from_bits_truncate(0o777)) }.map_err(Into::into)
|
||||
}
|
||||
|
||||
pub(crate) fn path_link(resolved_old: PathGet, resolved_new: PathGet) -> WasiResult<()> {
|
||||
pub(crate) fn path_link(
|
||||
resolved_old: PathGet,
|
||||
resolved_new: PathGet,
|
||||
follow_symlinks: bool,
|
||||
) -> WasiResult<()> {
|
||||
use yanix::file::{linkat, AtFlag};
|
||||
let flags = if follow_symlinks {
|
||||
AtFlag::SYMLINK_FOLLOW
|
||||
} else {
|
||||
AtFlag::empty()
|
||||
};
|
||||
unsafe {
|
||||
linkat(
|
||||
resolved_old.dirfd().as_raw_fd(),
|
||||
resolved_old.path(),
|
||||
resolved_new.dirfd().as_raw_fd(),
|
||||
resolved_new.path(),
|
||||
AtFlag::SYMLINK_FOLLOW,
|
||||
flags,
|
||||
)
|
||||
}
|
||||
.map_err(Into::into)
|
||||
|
||||
@@ -129,7 +129,11 @@ pub(crate) fn path_create_directory(file: &File, path: &str) -> WasiResult<()> {
|
||||
std::fs::create_dir(&path).map_err(Into::into)
|
||||
}
|
||||
|
||||
pub(crate) fn path_link(resolved_old: PathGet, resolved_new: PathGet) -> WasiResult<()> {
|
||||
pub(crate) fn path_link(
|
||||
resolved_old: PathGet,
|
||||
resolved_new: PathGet,
|
||||
follow_symlinks: bool,
|
||||
) -> WasiResult<()> {
|
||||
unimplemented!("path_link")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user