From d789f43bb82b8c43f0e8a5a53a4ce8b30d1c0984 Mon Sep 17 00:00:00 2001
From: dzwdz
Date: Sun, 12 Sep 2021 18:31:15 +0200
Subject: first working access function!

---
 src/init/main.c          | 10 ++++++++++
 src/kernel/vfs/request.c |  4 +++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/init/main.c b/src/init/main.c
index f31da02..28bb4a7 100644
--- a/src/init/main.c
+++ b/src/init/main.c
@@ -42,6 +42,7 @@ void fs_test(void) {
 	log("requesting file. ");
 	file = _syscall_open(argify("/mnt/tty"));
 	log("open returned. ");
+	_syscall_write(file, argify("hello"));
 }
 
 void fs_server(handle_t back) {
@@ -55,6 +56,15 @@ void fs_server(handle_t back) {
 				log(" was opened. ");
 				_syscall_fs_respond(0, NULL, 0); // doesn't check the path yet
 				break;
+
+			case VFSOP_WRITE:
+				// uppercase the buffer
+				for (int i = 0; i < len; i++) buf[i] &= ~32;
+				// and passthrough to tty
+				_syscall_write(tty_fd, buf, len);
+				_syscall_fs_respond(len, NULL, 0); // return the amt of bytes written
+				break;
+
 			default:
 				log("fuck");
 				break;
diff --git a/src/kernel/vfs/request.c b/src/kernel/vfs/request.c
index 9f0a14f..0524c53 100644
--- a/src/kernel/vfs/request.c
+++ b/src/kernel/vfs/request.c
@@ -57,7 +57,9 @@ _Noreturn void vfs_request_pass2handler(struct vfs_request *req) {
 					handler->awaited_req.buf, req->input.buf_kern, len))
 			goto fail; // can't copy buffer
 	} else {
-		panic(); // TODO
+		if (!virt_cpy(handler->pages, handler->awaited_req.buf, 
+					req->caller->pages, req->input.buf_kern, len))
+			goto fail; // can't copy buffer
 	}
 
 	if (!virt_cpy_to(handler->pages,
-- 
cgit v1.2.3