Add support for fchdir and support cd for fish
This commit is contained in:
		
							parent
							
								
									a54de67431
								
							
						
					
					
						commit
						1acfec6b12
					
				| @ -1,3 +1,7 @@ | ||||
| #! /usr/bin/fish | ||||
| command echo "Hello-world-from-fish" | awk '$1=$1' FS="-" OFS=" " > /root/output.txt | ||||
| cat /root/output.txt | ||||
| 
 | ||||
| cd /opt/occlum/glibc/lib | ||||
| /usr/bin/busybox ls -al | ||||
| pwd | ||||
|  | ||||
							
								
								
									
										1
									
								
								src/libos/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								src/libos/Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -411,7 +411,6 @@ dependencies = [ | ||||
| name = "rcore-fs" | ||||
| version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "bitflags", | ||||
|  "spin", | ||||
| ] | ||||
| 
 | ||||
|  | ||||
| @ -94,7 +94,7 @@ impl<'a> Debug for FsPath<'a> { | ||||
| } | ||||
| 
 | ||||
| /// Get the absolute path by file descriptor
 | ||||
| fn get_abs_path_by_fd(fd: FileDesc) -> Result<String> { | ||||
| pub fn get_abs_path_by_fd(fd: FileDesc) -> Result<String> { | ||||
|     let path = { | ||||
|         let file_ref = current!().file(fd)?; | ||||
|         if let Ok(inode_file) = file_ref.as_inode_file() { | ||||
|  | ||||
| @ -10,7 +10,7 @@ pub use self::fallocate::do_fallocate; | ||||
| pub use self::fcntl::{do_fcntl, FcntlCmd}; | ||||
| pub use self::file_flags::{AccessMode, CreationFlags, StatusFlags}; | ||||
| pub use self::flock::{Flock, FlockType}; | ||||
| pub use self::fspath::{FsPath, AT_FDCWD}; | ||||
| pub use self::fspath::{get_abs_path_by_fd, FsPath, AT_FDCWD}; | ||||
| pub use self::fsync::{do_fdatasync, do_fsync}; | ||||
| pub use self::getdents::{do_getdents, do_getdents64}; | ||||
| pub use self::ioctl::{ | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| use super::event_file::EventCreationFlags; | ||||
| use super::file_ops; | ||||
| use super::file_ops::{ | ||||
|     AccessibilityCheckFlags, AccessibilityCheckMode, ChownFlags, FcntlCmd, FsPath, LinkFlags, | ||||
|     StatFlags, UnlinkFlags, AT_FDCWD, | ||||
|     get_abs_path_by_fd, AccessibilityCheckFlags, AccessibilityCheckMode, ChownFlags, FcntlCmd, | ||||
|     FsPath, LinkFlags, StatFlags, UnlinkFlags, AT_FDCWD, | ||||
| }; | ||||
| use super::fs_ops; | ||||
| use super::time::{clockid_t, itimerspec_t, ClockID}; | ||||
| @ -362,6 +362,12 @@ pub fn do_chdir(path: *const i8) -> Result<isize> { | ||||
|     Ok(0) | ||||
| } | ||||
| 
 | ||||
| pub fn do_fchdir(fd: FileDesc) -> Result<isize> { | ||||
|     let path = get_abs_path_by_fd(fd)?; | ||||
|     fs_ops::do_chdir(&path)?; | ||||
|     Ok(0) | ||||
| } | ||||
| 
 | ||||
| pub fn do_getcwd(buf_ptr: *mut u8, size: usize) -> Result<isize> { | ||||
|     let buf = { | ||||
|         from_user::check_mut_array(buf_ptr, size)?; | ||||
|  | ||||
| @ -23,14 +23,14 @@ use util::mem_util::from_user::*; | ||||
| use crate::exception::do_handle_exception; | ||||
| use crate::fs::{ | ||||
|     do_access, do_chdir, do_chmod, do_chown, do_close, do_dup, do_dup2, do_dup3, do_eventfd, | ||||
|     do_eventfd2, do_faccessat, do_fallocate, do_fchmod, do_fchmodat, do_fchown, do_fchownat, | ||||
|     do_fcntl, do_fdatasync, do_fstat, do_fstatat, do_fstatfs, do_fsync, do_ftruncate, do_getcwd, | ||||
|     do_getdents, do_getdents64, do_ioctl, do_lchown, do_link, do_linkat, do_lseek, do_lstat, | ||||
|     do_mkdir, do_mkdirat, do_mount_rootfs, do_open, do_openat, do_pipe, do_pipe2, do_pread, | ||||
|     do_pwrite, do_read, do_readlink, do_readlinkat, do_readv, do_rename, do_renameat, do_rmdir, | ||||
|     do_sendfile, do_stat, do_statfs, do_symlink, do_symlinkat, do_sync, do_timerfd_create, | ||||
|     do_timerfd_gettime, do_timerfd_settime, do_truncate, do_unlink, do_unlinkat, do_write, | ||||
|     do_writev, iovec_t, AsTimer, File, FileDesc, FileRef, HostStdioFds, Stat, Statfs, | ||||
|     do_eventfd2, do_faccessat, do_fallocate, do_fchdir, do_fchmod, do_fchmodat, do_fchown, | ||||
|     do_fchownat, do_fcntl, do_fdatasync, do_fstat, do_fstatat, do_fstatfs, do_fsync, do_ftruncate, | ||||
|     do_getcwd, do_getdents, do_getdents64, do_ioctl, do_lchown, do_link, do_linkat, do_lseek, | ||||
|     do_lstat, do_mkdir, do_mkdirat, do_mount_rootfs, do_open, do_openat, do_pipe, do_pipe2, | ||||
|     do_pread, do_pwrite, do_read, do_readlink, do_readlinkat, do_readv, do_rename, do_renameat, | ||||
|     do_rmdir, do_sendfile, do_stat, do_statfs, do_symlink, do_symlinkat, do_sync, | ||||
|     do_timerfd_create, do_timerfd_gettime, do_timerfd_settime, do_truncate, do_unlink, do_unlinkat, | ||||
|     do_write, do_writev, iovec_t, AsTimer, File, FileDesc, FileRef, HostStdioFds, Stat, Statfs, | ||||
| }; | ||||
| use crate::interrupt::{do_handle_interrupt, sgx_interrupt_info_t}; | ||||
| use crate::misc::{resource_t, rlimit_t, sysinfo_t, utsname_t}; | ||||
| @ -167,7 +167,7 @@ macro_rules! process_syscall_table_with_callback { | ||||
|             (Getdents = 78) => do_getdents(fd: FileDesc, buf: *mut u8, buf_size: usize), | ||||
|             (Getcwd = 79) => do_getcwd(buf: *mut u8, size: usize), | ||||
|             (Chdir = 80) => do_chdir(path: *const i8), | ||||
|             (Fchdir = 81) => handle_unsupported(), | ||||
|             (Fchdir = 81) => do_fchdir(fd: FileDesc), | ||||
|             (Rename = 82) => do_rename(oldpath: *const i8, newpath: *const i8), | ||||
|             (Mkdir = 83) => do_mkdir(path: *const i8, mode: usize), | ||||
|             (Rmdir = 84) => do_rmdir(path: *const i8), | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user