Add syscall creat

This commit is contained in:
skpupil
2024-05-29 14:43:07 +08:00
committed by Tate, Hongliang Tian
parent fa7d0a787f
commit 4101d8328a
5 changed files with 25 additions and 12 deletions

View File

@ -114,7 +114,12 @@ impl FsResolver {
Err(e) => return Err(e),
};
if creation_flags.contains(CreationFlags::O_TRUNC) {
dentry.resize(0)?;
}
let inode_handle = InodeHandle::new(dentry, access_mode, status_flags)?;
Ok(inode_handle)
}

View File

@ -56,7 +56,7 @@ use crate::syscall::{
mprotect::sys_mprotect,
munmap::sys_munmap,
nanosleep::{sys_clock_nanosleep, sys_nanosleep},
open::{sys_open, sys_openat},
open::{sys_creat, sys_open, sys_openat},
pause::sys_pause,
pipe::{sys_pipe, sys_pipe2},
poll::sys_poll,
@ -172,6 +172,7 @@ impl_syscall_nums_and_dispatch_fn! {
SYS_RENAME = 82 => sys_rename(args[..2]);
SYS_MKDIR = 83 => sys_mkdir(args[..2]);
SYS_RMDIR = 84 => sys_rmdir(args[..1]);
SYS_CREAT = 85 => sys_creat(args[..2]);
SYS_LINK = 86 => sys_link(args[..2]);
SYS_UNLINK = 87 => sys_unlink(args[..1]);
SYS_SYMLINK = 88 => sys_symlink(args[..2]);

View File

@ -6,7 +6,7 @@ use crate::{
file_handle::FileLike,
file_table::{FdFlags, FileDesc},
fs_resolver::{FsPath, AT_FDCWD},
utils::CreationFlags,
utils::{AccessMode, CreationFlags},
},
prelude::*,
syscall::constants::MAX_FILENAME_LEN,
@ -50,6 +50,12 @@ pub fn sys_open(path_addr: Vaddr, flags: u32, mode: u16) -> Result<SyscallReturn
self::sys_openat(AT_FDCWD, path_addr, flags, mode)
}
pub fn sys_creat(path_addr: Vaddr, mode: u16) -> Result<SyscallReturn> {
let flags =
AccessMode::O_WRONLY as u32 | CreationFlags::O_CREAT.bits() | CreationFlags::O_TRUNC.bits();
self::sys_openat(AT_FDCWD, path_addr, flags, mode)
}
/// File for output busybox ash log.
struct BusyBoxTraceFile;