From 3deb2df8e62a5f0a5535ee734a5aa13b0959f53f Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Mon, 25 Mar 2024 21:02:58 +0100 Subject: Random changes --- kernel/fs/shm.c | 9 ++++----- kernel/fs/vfs.c | 4 ++++ kernel/fs/vfs.h | 1 + 3 files changed, 9 insertions(+), 5 deletions(-) (limited to 'kernel/fs') diff --git a/kernel/fs/shm.c b/kernel/fs/shm.c index e0c0211..9215b24 100644 --- a/kernel/fs/shm.c +++ b/kernel/fs/shm.c @@ -55,9 +55,10 @@ vfs_vm_object_t *shm_get_vm_object(u64 length, u64 offset, vfs_fd_t *fd) { int shm_ftruncate(vfs_fd_t *fd, size_t length) { vfs_vm_object_t *p = fd->inode->internal_object; p->size = length; - p->virtual_object = ksbrk(length); + p->real_pointer = krealloc(p->real_pointer, length + 0x2000); + p->virtual_object = align_page(p->real_pointer); int n = (uintptr_t)align_page((void *)(u32)length) / 0x1000; - p->object = kmalloc(sizeof(void *) * n); + p->object = krealloc(p->object, sizeof(void *) * n); for (int i = 0; i < n; i++) { p->object[i] = (void *)(get_page(p->virtual_object + (i * 0x1000), NULL, 0, 0)->frame * @@ -73,9 +74,7 @@ int shm_open(const char *name, int oflag, mode_t mode) { if (!internal_object) { // if (!(oflag & O_CREAT)) // return -EMFILE; - internal_object = kmalloc(sizeof(vfs_vm_object_t)); - internal_object->object = NULL; - internal_object->size = 0; + internal_object = kcalloc(1, sizeof(vfs_vm_object_t)); hashmap_add_entry(shared_memory_objects, name, internal_object, NULL, 0); } diff --git a/kernel/fs/vfs.c b/kernel/fs/vfs.c index 6a8dfd1..143dc9d 100644 --- a/kernel/fs/vfs.c +++ b/kernel/fs/vfs.c @@ -379,6 +379,10 @@ vfs_vm_object_t *vfs_get_vm_object(int fd, u64 length, u64 offset) { if (!vfs_fd) { return NULL; } + assert(vfs_fd->inode); + if(!vfs_fd->inode->get_vm_object) { + return NULL; + } vfs_vm_object_t *r = vfs_fd->inode->get_vm_object(length, offset, vfs_fd); return r; } diff --git a/kernel/fs/vfs.h b/kernel/fs/vfs.h index bee3179..74e5bf4 100644 --- a/kernel/fs/vfs.h +++ b/kernel/fs/vfs.h @@ -29,6 +29,7 @@ typedef struct vfs_mounts vfs_mounts_t; #define FS_TYPE_LINK 7 struct vfs_vm_object { + void *real_pointer; void *virtual_object; void **object; u64 size; -- cgit v1.2.3