From c4f8ef91f18d854a4ede7a94e95b2eab898d6963 Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Sun, 10 Aug 2025 15:40:19 -0400 Subject: working usermode objdir iteration --- syscall/handles.h | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'syscall/handles.h') diff --git a/syscall/handles.h b/syscall/handles.h index f9fd79c..5b6e395 100644 --- a/syscall/handles.h +++ b/syscall/handles.h @@ -2,7 +2,26 @@ #define _JOVE_SYSCALL_HANDLES_H 1 #include "object.h" +#include -int syscall_handle_invoke_objdir(objdir_t *root_dir, objdir_t *target_dir, void *payload); +#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 -- cgit v1.2.1