diff --git a/kernel/src/filesystem/fat/fs.rs b/kernel/src/filesystem/fat/fs.rs index e633eb8a..b2e6c160 100644 --- a/kernel/src/filesystem/fat/fs.rs +++ b/kernel/src/filesystem/fat/fs.rs @@ -1511,6 +1511,17 @@ impl IndexNode for LockedFATInode { } } + fn truncate(&self, len: usize) -> Result<(), SystemError> { + let guard: SpinLockGuard = self.0.lock(); + let old_size = guard.metadata.size as usize; + if len < old_size { + drop(guard); + self.resize(len) + } else { + Ok(()) + } + } + fn list(&self) -> Result, SystemError> { let mut guard: SpinLockGuard = self.0.lock(); let fatent: &FATDirEntry = &guard.inode_type; diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 907f71bb..25324589 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -357,6 +357,8 @@ pub const SYS_IOCTL: usize = 16; #[allow(dead_code)] pub const SYS_WRITEV: usize = 20; +pub const SYS_MADVISE: usize = 28; + pub const SYS_DUP: usize = 32; pub const SYS_DUP2: usize = 33; @@ -1128,6 +1130,11 @@ impl Syscall { Ok(0) } + SYS_MADVISE => { + kwarn!("SYS_MADVISE has not yet been implemented"); + Ok(0) + } + _ => panic!("Unsupported syscall ID: {}", syscall_num), }; return r;