mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-21 00:06:34 +00:00
Fix the fstatat syscall with empty filename
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
729c6ecd0c
commit
e0d7b140ce
@ -53,12 +53,18 @@ pub fn sys_fstatat(
|
|||||||
"dirfd = {}, filename = {:?}, stat_buf_ptr = 0x{:x}, flags = {:?}",
|
"dirfd = {}, filename = {:?}, stat_buf_ptr = 0x{:x}, flags = {:?}",
|
||||||
dirfd, filename, stat_buf_ptr, flags
|
dirfd, filename, stat_buf_ptr, flags
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if filename.is_empty() {
|
||||||
|
if !flags.contains(StatFlags::AT_EMPTY_PATH) {
|
||||||
|
return_errno_with_message!(Errno::ENOENT, "path is empty");
|
||||||
|
}
|
||||||
|
// In this case, the behavior of fstatat() is similar to that of fstat().
|
||||||
|
return self::sys_fstat(dirfd, stat_buf_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
let current = current!();
|
let current = current!();
|
||||||
let dentry = {
|
let dentry = {
|
||||||
let filename = filename.to_string_lossy();
|
let filename = filename.to_string_lossy();
|
||||||
if filename.is_empty() && !flags.contains(StatFlags::AT_EMPTY_PATH) {
|
|
||||||
return_errno_with_message!(Errno::ENOENT, "path is empty");
|
|
||||||
}
|
|
||||||
let fs_path = FsPath::new(dirfd, filename.as_ref())?;
|
let fs_path = FsPath::new(dirfd, filename.as_ref())?;
|
||||||
let fs = current.fs().read();
|
let fs = current.fs().read();
|
||||||
if flags.contains(StatFlags::AT_SYMLINK_NOFOLLOW) {
|
if flags.contains(StatFlags::AT_SYMLINK_NOFOLLOW) {
|
||||||
|
Reference in New Issue
Block a user