实现了sys_rename (#578)

* 基本实现了rename的系统调用

* 实现相对路径的mv

* confilct resolve

* make fmt

* 更改校验位置,
 增加了SYS_RENAMEAT与SYS_RENAMEAT2两个系统调用,其实现与SYS_RENAME基本一致

* 删除了fat中的link

* fix

* 修改注释格式,删除管道文件判断

* 1
This commit is contained in:
TTaq
2024-03-18 14:47:59 +08:00
committed by GitHub
parent c3c7344451
commit 9e481b3bfe
10 changed files with 255 additions and 8 deletions

View File

@ -24,7 +24,7 @@ use crate::{
arch::{cpu::cpu_reset, interrupt::TrapFrame, MMArch},
driver::base::block::SeekFrom,
filesystem::vfs::{
fcntl::FcntlCommand,
fcntl::{AtFlags, FcntlCommand},
file::FileMode,
syscall::{ModeType, PosixKstat, SEEK_CUR, SEEK_END, SEEK_MAX, SEEK_SET},
MAX_PATHLEN,
@ -107,6 +107,35 @@ impl Syscall {
res
}
SYS_RENAME => {
let oldname: *const u8 = args[0] as *const u8;
let newname: *const u8 = args[1] as *const u8;
Self::do_renameat2(
AtFlags::AT_FDCWD.bits(),
oldname,
AtFlags::AT_FDCWD.bits(),
newname,
0,
)
}
SYS_RENAMEAT => {
let oldfd = args[0] as i32;
let oldname: *const u8 = args[1] as *const u8;
let newfd = args[2] as i32;
let newname: *const u8 = args[3] as *const u8;
Self::do_renameat2(oldfd, oldname, newfd, newname, 0)
}
SYS_RENAMEAT2 => {
let oldfd = args[0] as i32;
let oldname: *const u8 = args[1] as *const u8;
let newfd = args[2] as i32;
let newname: *const u8 = args[3] as *const u8;
let flags = args[4] as u32;
Self::do_renameat2(oldfd, oldname, newfd, newname, flags)
}
SYS_OPENAT => {
let dirfd = args[0] as i32;
let path: &CStr = unsafe { CStr::from_ptr(args[1] as *const c_char) };
@ -1030,6 +1059,17 @@ impl Syscall {
)
}
SYS_FADVISE64 => {
// todo: 这个系统调用还没有实现
Err(SystemError::ENOSYS)
}
SYS_NEWFSTATAT => {
// todo: 这个系统调用还没有实现
Err(SystemError::ENOSYS)
}
SYS_SCHED_YIELD => Self::sched_yield(),
_ => panic!("Unsupported syscall ID: {}", syscall_num),