kernel/fs: Implement usr_pread/pwrite in FDT

Signed-off-by: EnderIce2 <enderice2@protonmail.com>
This commit is contained in:
EnderIce2 2024-12-20 04:09:30 +02:00
parent 37c3ee8e99
commit cbd671292d
Signed by: enderice2
GPG Key ID: EACC3AD603BAB4DD
2 changed files with 20 additions and 0 deletions

View File

@ -211,6 +211,8 @@ namespace vfs
int usr_creat(const char *pathname, mode_t mode); int usr_creat(const char *pathname, mode_t mode);
ssize_t usr_read(int fd, void *buf, size_t count); 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_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); int usr_close(int fd);
off_t usr_lseek(int fd, off_t offset, int whence); off_t usr_lseek(int fd, off_t offset, int whence);
int usr_stat(const char *pathname, struct kstat *statbuf); int usr_stat(const char *pathname, struct kstat *statbuf);

View File

@ -212,6 +212,15 @@ namespace vfs
return it->second.Node->Read(buf, count, it->second.Offset); 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) ssize_t FileDescriptorTable::usr_write(int fd, const void *buf, size_t count)
{ {
auto it = this->FileMap.find(fd); auto it = this->FileMap.find(fd);
@ -221,6 +230,15 @@ namespace vfs
return it->second.Node->Write(buf, count, it->second.Offset); 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) int FileDescriptorTable::usr_close(int fd)
{ {
auto it = this->FileMap.find(fd); auto it = this->FileMap.find(fd);