#ifndef _JOVE_SYSCALL_HANDLES_H #define _JOVE_SYSCALL_HANDLES_H 1 #include "object.h" #include #define SYSCALL_PAYLOAD_TAKEL(p, at, val, type) \ if(sizeof(type) + at >= KO_MESSAGE_BYTES) return -KE_BADMSG; \ val = *((type*)(&p[at])); \ at += sizeof(type) #define SYSCALL_PAYLOAD_TAKEP(p, at, val, type) \ if(sizeof(type) + at >= KO_MESSAGE_BYTES) return -KE_BADMSG; \ val = ((type*)(&p[at])); \ at += sizeof(type) #define SYSCALL_PAYLOAD_TAKEOBJ(p, at, w, o) \ SYSCALL_PAYLOAD_TAKEL(p, at, w, size_t); \ if(w + payload_at >= KO_MESSAGE_BYTES) return -KE_BADMSG; \ o = objdir_seek(root_dir, &p[at], w); \ at += w int syscall_handle_invoke_objdir(objdir_t *root_dir, objdir_entry_t *target, uint8_t *payload, size_t payload_at); int syscall_handle_invoke_untyped(objdir_t *root_dir, objdir_entry_t *target, uint8_t *payload, size_t payload_at); int syscall_handle_invoke_mapping(objdir_t *root_dir, objdir_entry_t *target, uint8_t *payload, size_t payload_at); #endif