mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-19 04:56:30 +00:00
实现了sys_rename (#578)
* 基本实现了rename的系统调用 * 实现相对路径的mv * confilct resolve * make fmt * 更改校验位置, 增加了SYS_RENAMEAT与SYS_RENAMEAT2两个系统调用,其实现与SYS_RENAME基本一致 * 删除了fat中的link * fix * 修改注释格式,删除管道文件判断 * 1
This commit is contained in:
@ -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),
|
||||
|
Reference in New Issue
Block a user