[libos] faccessat only accepts three parameters
This commit is contained in:
parent
47ac767886
commit
beeffcced7
@ -22,6 +22,7 @@ impl AccessibilityCheckMode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
bitflags! {
|
bitflags! {
|
||||||
pub struct AccessibilityCheckFlags : u32 {
|
pub struct AccessibilityCheckFlags : u32 {
|
||||||
/// If path is a symbolic link, do not dereference it
|
/// If path is a symbolic link, do not dereference it
|
||||||
@ -31,31 +32,21 @@ bitflags! {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
impl AccessibilityCheckFlags {
|
impl AccessibilityCheckFlags {
|
||||||
pub fn from_u32(bits: u32) -> Result<Self> {
|
pub fn from_u32(bits: u32) -> Result<Self> {
|
||||||
AccessibilityCheckFlags::from_bits(bits).ok_or_else(|| errno!(EINVAL, "invalid flags"))
|
AccessibilityCheckFlags::from_bits(bits).ok_or_else(|| errno!(EINVAL, "invalid flags"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn do_faccessat(
|
pub fn do_faccessat(fs_path: &FsPath, mode: AccessibilityCheckMode) -> Result<()> {
|
||||||
fs_path: &FsPath,
|
debug!("faccessat: fs_path: {:?}, mode: {:?}", fs_path, mode);
|
||||||
mode: AccessibilityCheckMode,
|
|
||||||
flags: AccessibilityCheckFlags,
|
|
||||||
) -> Result<()> {
|
|
||||||
debug!(
|
|
||||||
"faccessat: fs_path: {:?}, mode: {:?}, flags: {:?}",
|
|
||||||
fs_path, mode, flags
|
|
||||||
);
|
|
||||||
|
|
||||||
let inode = {
|
let inode = {
|
||||||
let path = fs_path.to_abs_path()?;
|
let path = fs_path.to_abs_path()?;
|
||||||
let current = current!();
|
let current = current!();
|
||||||
let fs = current.fs().read().unwrap();
|
let fs = current.fs().read().unwrap();
|
||||||
if flags.contains(AccessibilityCheckFlags::AT_SYMLINK_NOFOLLOW) {
|
fs.lookup_inode(&path)?
|
||||||
fs.lookup_inode_no_follow(&path)?
|
|
||||||
} else {
|
|
||||||
fs.lookup_inode(&path)?
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
if mode.test_for_exist() {
|
if mode.test_for_exist() {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use super::*;
|
use super::*;
|
||||||
use process::Process;
|
use process::Process;
|
||||||
|
|
||||||
pub use self::access::{do_faccessat, AccessibilityCheckFlags, AccessibilityCheckMode};
|
pub use self::access::{do_faccessat, AccessibilityCheckMode};
|
||||||
pub use self::chmod::{do_fchmod, do_fchmodat, FileMode};
|
pub use self::chmod::{do_fchmod, do_fchmodat, FileMode};
|
||||||
pub use self::chown::{do_fchown, do_fchownat, ChownFlags};
|
pub use self::chown::{do_fchown, do_fchownat, ChownFlags};
|
||||||
pub use self::close::do_close;
|
pub use self::close::do_close;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
use super::event_file::EventCreationFlags;
|
use super::event_file::EventCreationFlags;
|
||||||
use super::file_ops;
|
use super::file_ops;
|
||||||
use super::file_ops::{
|
use super::file_ops::{
|
||||||
get_abs_path_by_fd, get_utimes, AccessibilityCheckFlags, AccessibilityCheckMode, ChownFlags,
|
get_abs_path_by_fd, get_utimes, AccessibilityCheckMode, ChownFlags, FcntlCmd, FsPath,
|
||||||
FcntlCmd, FsPath, LinkFlags, StatFlags, UnlinkFlags, Utime, UtimeFlags, AT_FDCWD, UTIME_OMIT,
|
LinkFlags, StatFlags, UnlinkFlags, Utime, UtimeFlags, AT_FDCWD, UTIME_OMIT,
|
||||||
};
|
};
|
||||||
use super::fs_ops;
|
use super::fs_ops;
|
||||||
use super::fs_ops::{MountFlags, MountOptions, UmountFlags};
|
use super::fs_ops::{MountFlags, MountOptions, UmountFlags};
|
||||||
@ -304,17 +304,16 @@ pub fn do_fstatat(dirfd: i32, path: *const i8, stat_buf: *mut Stat, flags: u32)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn do_access(path: *const i8, mode: u32) -> Result<isize> {
|
pub fn do_access(path: *const i8, mode: u32) -> Result<isize> {
|
||||||
self::do_faccessat(AT_FDCWD, path, mode, 0)
|
self::do_faccessat(AT_FDCWD, path, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn do_faccessat(dirfd: i32, path: *const i8, mode: u32, flags: u32) -> Result<isize> {
|
pub fn do_faccessat(dirfd: i32, path: *const i8, mode: u32) -> Result<isize> {
|
||||||
let path = from_user::clone_cstring_safely(path)?
|
let path = from_user::clone_cstring_safely(path)?
|
||||||
.to_string_lossy()
|
.to_string_lossy()
|
||||||
.into_owned();
|
.into_owned();
|
||||||
let fs_path = FsPath::new(&path, dirfd, false)?;
|
let fs_path = FsPath::new(&path, dirfd, false)?;
|
||||||
let mode = AccessibilityCheckMode::from_u32(mode)?;
|
let mode = AccessibilityCheckMode::from_u32(mode)?;
|
||||||
let flags = AccessibilityCheckFlags::from_u32(flags)?;
|
file_ops::do_faccessat(&fs_path, mode).map(|_| 0)
|
||||||
file_ops::do_faccessat(&fs_path, mode, flags).map(|_| 0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn do_lseek(fd: FileDesc, offset: off_t, whence: i32) -> Result<isize> {
|
pub fn do_lseek(fd: FileDesc, offset: off_t, whence: i32) -> Result<isize> {
|
||||||
|
@ -366,7 +366,7 @@ macro_rules! process_syscall_table_with_callback {
|
|||||||
(Symlinkat = 266) => do_symlinkat(target: *const i8, new_dirfd: i32, link_path: *const i8),
|
(Symlinkat = 266) => do_symlinkat(target: *const i8, new_dirfd: i32, link_path: *const i8),
|
||||||
(Readlinkat = 267) => do_readlinkat(dirfd: i32, path: *const i8, buf: *mut u8, size: usize),
|
(Readlinkat = 267) => do_readlinkat(dirfd: i32, path: *const i8, buf: *mut u8, size: usize),
|
||||||
(Fchmodat = 268) => do_fchmodat(dirfd: i32, path: *const i8, mode: u16),
|
(Fchmodat = 268) => do_fchmodat(dirfd: i32, path: *const i8, mode: u16),
|
||||||
(Faccessat = 269) => do_faccessat(dirfd: i32, path: *const i8, mode: u32, flags: u32),
|
(Faccessat = 269) => do_faccessat(dirfd: i32, path: *const i8, mode: u32),
|
||||||
(Pselect6 = 270) => do_pselect6(nfds: c_int, readfds: *mut libc::fd_set, writefds: *mut libc::fd_set, exceptfds: *mut libc::fd_set, timeout: *mut timespec_t, data: *const sigset_argpack),
|
(Pselect6 = 270) => do_pselect6(nfds: c_int, readfds: *mut libc::fd_set, writefds: *mut libc::fd_set, exceptfds: *mut libc::fd_set, timeout: *mut timespec_t, data: *const sigset_argpack),
|
||||||
(Ppoll = 271) => do_ppoll(fds: *mut libc::pollfd, nfds: libc::nfds_t, timeout_ts: *const timespec_t, sigmask: *const sigset_t),
|
(Ppoll = 271) => do_ppoll(fds: *mut libc::pollfd, nfds: libc::nfds_t, timeout_ts: *const timespec_t, sigmask: *const sigset_t),
|
||||||
(Unshare = 272) => handle_unsupported(),
|
(Unshare = 272) => handle_unsupported(),
|
||||||
|
Loading…
Reference in New Issue
Block a user