[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! { | ||||
|     pub struct AccessibilityCheckFlags : u32 { | ||||
|         /// If path is a symbolic link, do not dereference it
 | ||||
| @ -31,31 +32,21 @@ bitflags! { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[allow(dead_code)] | ||||
| impl AccessibilityCheckFlags { | ||||
|     pub fn from_u32(bits: u32) -> Result<Self> { | ||||
|         AccessibilityCheckFlags::from_bits(bits).ok_or_else(|| errno!(EINVAL, "invalid flags")) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| pub fn do_faccessat( | ||||
|     fs_path: &FsPath, | ||||
|     mode: AccessibilityCheckMode, | ||||
|     flags: AccessibilityCheckFlags, | ||||
| ) -> Result<()> { | ||||
|     debug!( | ||||
|         "faccessat: fs_path: {:?}, mode: {:?}, flags: {:?}", | ||||
|         fs_path, mode, flags | ||||
|     ); | ||||
| pub fn do_faccessat(fs_path: &FsPath, mode: AccessibilityCheckMode) -> Result<()> { | ||||
|     debug!("faccessat: fs_path: {:?}, mode: {:?}", fs_path, mode); | ||||
| 
 | ||||
|     let inode = { | ||||
|         let path = fs_path.to_abs_path()?; | ||||
|         let current = current!(); | ||||
|         let fs = current.fs().read().unwrap(); | ||||
|         if flags.contains(AccessibilityCheckFlags::AT_SYMLINK_NOFOLLOW) { | ||||
|             fs.lookup_inode_no_follow(&path)? | ||||
|         } else { | ||||
|             fs.lookup_inode(&path)? | ||||
|         } | ||||
|         fs.lookup_inode(&path)? | ||||
|     }; | ||||
|     if mode.test_for_exist() { | ||||
|         return Ok(()); | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| use super::*; | ||||
| 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::chown::{do_fchown, do_fchownat, ChownFlags}; | ||||
| pub use self::close::do_close; | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| use super::event_file::EventCreationFlags; | ||||
| use super::file_ops; | ||||
| use super::file_ops::{ | ||||
|     get_abs_path_by_fd, get_utimes, AccessibilityCheckFlags, AccessibilityCheckMode, ChownFlags, | ||||
|     FcntlCmd, FsPath, LinkFlags, StatFlags, UnlinkFlags, Utime, UtimeFlags, AT_FDCWD, UTIME_OMIT, | ||||
|     get_abs_path_by_fd, get_utimes, AccessibilityCheckMode, ChownFlags, FcntlCmd, FsPath, | ||||
|     LinkFlags, StatFlags, UnlinkFlags, Utime, UtimeFlags, AT_FDCWD, UTIME_OMIT, | ||||
| }; | ||||
| use super::fs_ops; | ||||
| 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> { | ||||
|     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)? | ||||
|         .to_string_lossy() | ||||
|         .into_owned(); | ||||
|     let fs_path = FsPath::new(&path, dirfd, false)?; | ||||
|     let mode = AccessibilityCheckMode::from_u32(mode)?; | ||||
|     let flags = AccessibilityCheckFlags::from_u32(flags)?; | ||||
|     file_ops::do_faccessat(&fs_path, mode, flags).map(|_| 0) | ||||
|     file_ops::do_faccessat(&fs_path, mode).map(|_| 0) | ||||
| } | ||||
| 
 | ||||
| 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), | ||||
|             (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), | ||||
|             (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), | ||||
|             (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(), | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user