From 153ac5fa0b8c4d178bf7590f0344612c6c3eaa70 Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Sat, 3 Oct 2026 12:56:27 -0400 Subject: add SYSCALL_MESSAGE_SIZE --- api/syscall.h | 11 +++++++++++ doc/syscall.md | 11 +++++++++++ sys/syscall.h | 1 + sys/syscall_message.c | 16 ++++++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 sys/syscall_message.c diff --git a/api/syscall.h b/api/syscall.h index 9f8ec13..5658ac2 100644 --- a/api/syscall.h +++ b/api/syscall.h @@ -150,6 +150,17 @@ struct syscall_initrd_file_read size_t read_size; }; +/**JOVE_OBJ_MESSAGE syscalls. + * */ + +enum +{ + _SYSCALL_MESSAGE_NONE = 0, + SYSCALL_MESSAGE_SIZE +}; + +#define SYSCALL_PERM_MESSAGE_SIZE (JOVE_PERM_READ) + /**JOVE_OBJ_VIRTTERM syscalls.*/ enum diff --git a/doc/syscall.md b/doc/syscall.md index 3bfa00b..5a3d1e7 100644 --- a/doc/syscall.md +++ b/doc/syscall.md @@ -314,3 +314,14 @@ If the read size + starting index > file size, the kernel will return `-EOOB`. If the message is too small for the read bytes, the kernel will return `-ETOOBIG`. Successful reading returns `0`. + + +### JOVE_OBJ_MESSAGE + +| Syscall | Target Permissions | +|----------------------|--------------------| +| SYSCALL_MESSAGE_SIZE | JOVE_PERM_READ | + +#### SYSCALL_MESSAGE_SIZE + +Returns the size of the message object in bytes. diff --git a/sys/syscall.h b/sys/syscall.h index ab13118..461b104 100644 --- a/sys/syscall.h +++ b/sys/syscall.h @@ -58,5 +58,6 @@ int _syscall_handle_objdir(syscall_context_t *ctx); int _syscall_handle_untyped(syscall_context_t *ctx); int _syscall_handle_pagedir(syscall_context_t *ctx); int _syscall_handle_initrd_file(syscall_context_t *ctx); +int _syscall_handle_message(syscall_context_t *ctx); #endif diff --git a/sys/syscall_message.c b/sys/syscall_message.c new file mode 100644 index 0000000..5edf33f --- /dev/null +++ b/sys/syscall_message.c @@ -0,0 +1,16 @@ +#include "api/error.h" +#include "sys/message.h" +#include "sys/syscall.h" + +int +_syscall_handle_message(syscall_context_t *ctx) +{ + switch(ctx->header->callid) { + case SYSCALL_OBJDIR_OBJTYPE: + if(ctx->target.permissions & SYSCALL_PERM_OBJDIR_OBJTYPE) + return message_len(ctx->message.obj); + return -EPERM; + default: + return -EBADCALL; + } +} -- cgit v1.2.3