#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; } }