summaryrefslogtreecommitdiffstats
path: root/syscall/handles.h
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2025-08-10 15:40:19 -0400
committerJon Santmyer <jon@jonsantmyer.com>2025-08-10 15:40:19 -0400
commitc4f8ef91f18d854a4ede7a94e95b2eab898d6963 (patch)
treec2772c4f380a684b6fa347f03b13f9476bf9500c /syscall/handles.h
parentb905869a35f062a4e5072f10bec3a2ba3db0e365 (diff)
downloadjove-kernel-c4f8ef91f18d854a4ede7a94e95b2eab898d6963.tar.gz
jove-kernel-c4f8ef91f18d854a4ede7a94e95b2eab898d6963.tar.bz2
jove-kernel-c4f8ef91f18d854a4ede7a94e95b2eab898d6963.zip
working usermode objdir iteration
Diffstat (limited to 'syscall/handles.h')
-rw-r--r--syscall/handles.h21
1 files changed, 20 insertions, 1 deletions
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 <stddef.h>
-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