summaryrefslogtreecommitdiffstats
path: root/sys/syscall_objdir.c
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-09-12 22:00:09 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-09-12 22:00:09 -0400
commit53fa3cd2bfdb122d773024612d8c1d71f0dd8188 (patch)
tree5ffe81718b400031ca9b3b68a6d152c574270af2 /sys/syscall_objdir.c
parent1d1a5cde7de28752727e3d56305a74afac8848ff (diff)
downloadjove-kernel-53fa3cd2bfdb122d773024612d8c1d71f0dd8188.tar.gz
jove-kernel-53fa3cd2bfdb122d773024612d8c1d71f0dd8188.tar.bz2
jove-kernel-53fa3cd2bfdb122d773024612d8c1d71f0dd8188.zip
add paging support
Diffstat (limited to 'sys/syscall_objdir.c')
-rw-r--r--sys/syscall_objdir.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/sys/syscall_objdir.c b/sys/syscall_objdir.c
index 5e49fd4..277639f 100644
--- a/sys/syscall_objdir.c
+++ b/sys/syscall_objdir.c
@@ -1,3 +1,4 @@
+#include "arch/x86_64/hal/obj.h"
#include "hal/process.h"
#include "jove.h"
#include "lib/printf.h"
@@ -10,20 +11,17 @@ s_syscall_objdir_objtype(
size_t payload_size,
void *payload_data)
{
- int bytes_needed = sizeof(struct syscall_generic_objpath);
- CHECK_TOOSMALL(bytes_needed, payload_size, "Message is too small for this payload!");
-
- struct syscall_generic_objpath *payload = payload_data;
- bytes_needed += payload->pathlen * 2;
- CHECK_TOOSMALL(bytes_needed, payload_size, "Message is too small for second target path!");
+ size_t bytes_needed = 2;
+ CHECK_TOOSMALL(bytes_needed, payload_size, "Message is too small for payload.");
- int retval = 0;
- jove_owned_obj_t *second_obj = objdir_getobj(objdir, payload->path, payload->pathlen);
- CHECK_OBJEXISTS(second_obj, "Second target does not exist!");
+ uint16_t local_idx = *((uint16_t*)payload_data);
+ if(local_idx > JOVE_OBJDIR_ENTRIES) {
+ kprintf("%s: Object index is out of bounds (>= 512)\n", __func__);
+ return EOOB;
+ }
- retval = obj_gettype(second_obj);
- obj_release(second_obj);
- return retval;
+ jove_obj_t local_obj = objdir_peeklocal(target_dir, local_idx);
+ return obj_peektype(local_obj);
}
int
@@ -41,6 +39,6 @@ _syscall_handle_objdir(
return s_syscall_objdir_objtype(objdir, target_obj, bytes_left, payload);
default:
kprintf("syscall_handle_objdir: Objdir does not support syscall %i\n", header->callid);
- return EOOB;
+ return EBADARG;
}
}