summaryrefslogtreecommitdiff
path: root/kernel/fs/shm.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-03-25 21:02:58 +0100
committerAnton Kling <anton@kling.gg>2024-03-25 21:04:10 +0100
commit3deb2df8e62a5f0a5535ee734a5aa13b0959f53f (patch)
treeaf8841076c95ae3de7dcd4a006026be2607a0fbf /kernel/fs/shm.c
parent6baa733f5682f660143c851a635a53dc2c2df7ae (diff)
Random changes
Diffstat (limited to 'kernel/fs/shm.c')
-rw-r--r--kernel/fs/shm.c9
1 files changed, 4 insertions, 5 deletions
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);
}