diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-09-07 19:19:24 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-09-07 19:19:24 -0400 |
| commit | df0688efa326a03a22bcbc36d1900926b7b1c986 (patch) | |
| tree | c67df82b0a6cd94693278a809ed0c9a69daf840f /sys/syscall_objdir.c | |
| parent | 4ca0bdf61196d0c3fd3f0fdbfb2d72481025cca2 (diff) | |
| download | jove-kernel-df0688efa326a03a22bcbc36d1900926b7b1c986.tar.gz jove-kernel-df0688efa326a03a22bcbc36d1900926b7b1c986.tar.bz2 jove-kernel-df0688efa326a03a22bcbc36d1900926b7b1c986.zip | |
split syscall info into api subfolder. untyped syscalls
Diffstat (limited to 'sys/syscall_objdir.c')
| -rw-r--r-- | sys/syscall_objdir.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/sys/syscall_objdir.c b/sys/syscall_objdir.c new file mode 100644 index 0000000..cf1e5b7 --- /dev/null +++ b/sys/syscall_objdir.c @@ -0,0 +1,46 @@ +#include "hal/process.h" +#include "jove.h" +#include "lib/printf.h" +#include "syscall.h" + +int +s_syscall_objdir_objtype( + jove_owned_obj_t *objdir, + jove_owned_obj_t *target_dir, + 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->second_pathlen * 2; + CHECK_TOOSMALL(bytes_needed, payload_size, "Message is too small for second target path!"); + + int retval = 0; + jove_owned_obj_t *second_obj = objdir_getobj(objdir, payload->second_path, payload->second_pathlen); + CHECK_OBJEXISTS(second_obj, "Second target does not exist!"); + + retval = obj_gettype(second_obj); + obj_release(second_obj); + return retval; +} + +int +_syscall_handle_objdir( + jove_owned_obj_t *pcb_obj, + jove_owned_obj_t *objdir, + jove_owned_obj_t *message_obj, + jove_owned_obj_t *target_obj, + struct syscall_header *header, + size_t bytes_left, + void *payload) +{ + switch(header->callid) { + case SYSCALL_OBJDIR_OBJTYPE: + 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; + } +} |
