summaryrefslogtreecommitdiff
path: root/kernel/fs/vfs.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-03-26 11:40:39 +0100
committerAnton Kling <anton@kling.gg>2024-03-26 11:40:39 +0100
commit297231bb3602d868d3891d357026c53f9fcc2402 (patch)
tree6c4f21db84912750f6f464b26bf1e4503d1fe479 /kernel/fs/vfs.c
parent3deb2df8e62a5f0a5535ee734a5aa13b0959f53f (diff)
Increase support for signals
Diffstat (limited to 'kernel/fs/vfs.c')
-rw-r--r--kernel/fs/vfs.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/kernel/fs/vfs.c b/kernel/fs/vfs.c
index 143dc9d..f2b763c 100644
--- a/kernel/fs/vfs.c
+++ b/kernel/fs/vfs.c
@@ -292,15 +292,15 @@ int vfs_open(const char *file, int flags, int mode) {
return vfs_create_fd(flags, mode, 0 /*is_tty*/, inode, NULL);
}
-int vfs_close(int fd) {
- vfs_fd_t *fd_ptr = get_vfs_fd(fd, NULL);
+int vfs_close_process(process_t *p, int fd) {
+ vfs_fd_t *fd_ptr = get_vfs_fd(fd, p);
if (NULL == fd_ptr) {
return -1;
}
assert(0 < fd_ptr->reference_count);
// Remove process reference
fd_ptr->reference_count--;
- current_task->file_descriptors[fd] = 0;
+ p->file_descriptors[fd] = 0;
// If no references left then free the contents
if (0 == fd_ptr->reference_count) {
if (fd_ptr->inode->close) {
@@ -312,6 +312,10 @@ int vfs_close(int fd) {
return 0;
}
+int vfs_close(int fd) {
+ return vfs_close_process(current_task, fd);
+}
+
int raw_vfs_pread(vfs_fd_t *vfs_fd, void *buf, u64 count, u64 offset) {
if (!(vfs_fd->flags & O_READ)) {
return -EBADF;
@@ -380,7 +384,7 @@ vfs_vm_object_t *vfs_get_vm_object(int fd, u64 length, u64 offset) {
return NULL;
}
assert(vfs_fd->inode);
- if(!vfs_fd->inode->get_vm_object) {
+ if (!vfs_fd->inode->get_vm_object) {
return NULL;
}
vfs_vm_object_t *r = vfs_fd->inode->get_vm_object(length, offset, vfs_fd);