From 2c911a3c870732737539a20b5a2844b5bed3d0c7 Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Wed, 3 Dec 2025 04:28:09 +0100 Subject: [PATCH] add read call --- kernel/syscall/handler.cc | 2 +- kernel/syscall/skeleton.cc | 15 +++++++++++---- kernel/syscall/skeleton.h | 2 +- kernel/user/app2/kappl.cc | 1 + 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/kernel/syscall/handler.cc b/kernel/syscall/handler.cc index f55febb..bf8fc41 100644 --- a/kernel/syscall/handler.cc +++ b/kernel/syscall/handler.cc @@ -48,7 +48,7 @@ extern "C" size_t syscall_handler(size_t sysnum, size_t p1, size_t p2, Syscall::Skeleton::write(Guard::enter().vault(), p1, (char*)p2, p3); break; case Syscall::ID::READ: - ; + return Syscall::Skeleton::read(Guard::enter().vault(), 0, (void*) p2, p3); break; case Syscall::ID::SEM_INIT: Syscall::Skeleton::sem_init(Guard::enter().vault(), p1, p2); diff --git a/kernel/syscall/skeleton.cc b/kernel/syscall/skeleton.cc index 04694e1..bf38c53 100644 --- a/kernel/syscall/skeleton.cc +++ b/kernel/syscall/skeleton.cc @@ -34,10 +34,17 @@ size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size) { return 0; } -size_t read(Vault &vault, uint32_t id) { - (void)vault; - (void)id; - return 0; +size_t read(Vault &vault, uint32_t id, void *buf, size_t len) { + size_t read_cnt = 0; + while(read_cnt <= len){ + Key key; + vault.keys.consume(key); + if(key.valid()) + ((char*)buf)[read_cnt++] = key.ascii(); + else + return read_cnt; + } + return len; } void sleep(Vault &vault, size_t ms) { diff --git a/kernel/syscall/skeleton.h b/kernel/syscall/skeleton.h index 7ab0464..f1c42ba 100644 --- a/kernel/syscall/skeleton.h +++ b/kernel/syscall/skeleton.h @@ -15,7 +15,7 @@ size_t test(Vault &vault, size_t p1, size_t p2, size_t p3, size_t p4, int getpid(Vault &vault); size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size); -size_t read(Vault &vault, uint32_t id); +size_t read(Vault &vault, uint32_t id, void *buf, size_t len); void sleep(Vault &vault, size_t ms); bool sem_init(Vault &vault, size_t id, uint32_t value); bool sem_destroy(Vault &vault, size_t id); diff --git a/kernel/user/app2/kappl.cc b/kernel/user/app2/kappl.cc index b63d956..07a1d06 100644 --- a/kernel/user/app2/kappl.cc +++ b/kernel/user/app2/kappl.cc @@ -1,6 +1,7 @@ // vim: set noet ts=4 sw=4: #include "./kappl.h" +#include "../../syscall/stub.h" #include "../../device/textstream.h" extern TextStream kout;