diff --git a/kernel/syscall/handler.cc b/kernel/syscall/handler.cc index e71e46b..fdf609f 100644 --- a/kernel/syscall/handler.cc +++ b/kernel/syscall/handler.cc @@ -44,9 +44,11 @@ extern "C" size_t syscall_handler(size_t sysnum, size_t p1, size_t p2, Syscall::Skeleton::test(Guard::enter().vault(), p1, p2, p3, p4, p5); break; case Syscall::ID::WRITE: - Guarded g = Guard::enter(); - g.vault().kout.setPos((int)p4, (int)p5); - Syscall::Skeleton::write(g.vault(), p1, (char*)p2, p3); + Guard::enter().vault().kout.setPos((int)p4, (int)p5); + Syscall::Skeleton::write(Guard::enter().vault(), p1, (char*)p2, p3); + break; + case Syscall::ID::READ: + ; break; } diff --git a/kernel/syscall/stub.h b/kernel/syscall/stub.h index 18e433e..379ec7d 100644 --- a/kernel/syscall/stub.h +++ b/kernel/syscall/stub.h @@ -8,6 +8,7 @@ namespace Syscall { enum class ID : size_t { TEST = 0, WRITE = 1, + READ = 2, }; } // namespace Syscall @@ -27,3 +28,7 @@ extern "C" ssize_t sys_safe_call(Syscall::ID id, size_t p1, size_t p2, [[gnu::always_inline]] static inline int write(int fd, const void *buf, size_t len, int x = -1, int y = -1) { return sys_call(Syscall::ID::WRITE, fd, (size_t)buf, len, x, y); } + +[[gnu::always_inline]] static inline int read(int fd, void *buf, size_t len){ + return sys_call(Syscall::ID::READ, fd, (size_t)buf, len, 0, 0); +}