From cbd671292d7d07f933e539f6aacf9d325caa2c08 Mon Sep 17 00:00:00 2001 From: EnderIce2 Date: Fri, 20 Dec 2024 04:09:30 +0200 Subject: [PATCH] kernel/fs: Implement usr_pread/pwrite in FDT Signed-off-by: EnderIce2 --- Kernel/include/filesystem.hpp | 2 ++ Kernel/storage/descriptor.cpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/Kernel/include/filesystem.hpp b/Kernel/include/filesystem.hpp index 759c3c63..a4be14b0 100644 --- a/Kernel/include/filesystem.hpp +++ b/Kernel/include/filesystem.hpp @@ -211,6 +211,8 @@ namespace vfs int usr_creat(const char *pathname, mode_t mode); ssize_t usr_read(int fd, void *buf, size_t count); ssize_t usr_write(int fd, const void *buf, size_t count); + ssize_t usr_pread(int fd, void *buf, size_t count, off_t offset); + ssize_t usr_pwrite(int fd, const void *buf, size_t count, off_t offset); int usr_close(int fd); off_t usr_lseek(int fd, off_t offset, int whence); int usr_stat(const char *pathname, struct kstat *statbuf); diff --git a/Kernel/storage/descriptor.cpp b/Kernel/storage/descriptor.cpp index 58de95a7..a0e7b0d5 100644 --- a/Kernel/storage/descriptor.cpp +++ b/Kernel/storage/descriptor.cpp @@ -212,6 +212,15 @@ namespace vfs return it->second.Node->Read(buf, count, it->second.Offset); } + ssize_t FileDescriptorTable::usr_pread(int fd, void *buf, size_t count, off_t offset) + { + auto it = this->FileMap.find(fd); + if (it == this->FileMap.end()) + ReturnLogError(-EBADF, "Invalid fd %d", fd); + + return it->second.Node->Read(buf, count, offset); + } + ssize_t FileDescriptorTable::usr_write(int fd, const void *buf, size_t count) { auto it = this->FileMap.find(fd); @@ -221,6 +230,15 @@ namespace vfs return it->second.Node->Write(buf, count, it->second.Offset); } + ssize_t FileDescriptorTable::usr_pwrite(int fd, const void *buf, size_t count, off_t offset) + { + auto it = this->FileMap.find(fd); + if (it == this->FileMap.end()) + ReturnLogError(-EBADF, "Invalid fd %d", fd); + + return it->second.Node->Write(buf, count, offset); + } + int FileDescriptorTable::usr_close(int fd) { auto it = this->FileMap.find(fd);