From: Matthias Kruk Date: Sat, 15 Aug 2020 06:24:43 +0000 (+0900) Subject: sys/io: Make _handle_msg() handle CXIO_READ and CXIO_WRITE requests X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=fe43db3c664813d42b7d669cfab14ecc9e2b0cf1;p=corax sys/io: Make _handle_msg() handle CXIO_READ and CXIO_WRITE requests --- diff --git a/sys/io/Makefile b/sys/io/Makefile index 2b00067..d722073 100644 --- a/sys/io/Makefile +++ b/sys/io/Makefile @@ -1,4 +1,4 @@ -OBJECTS = main.o proc.o file.o filedesc.o pipe.o +OBJECTS = main.o proc.o file.o filedesc.o pipe.o read.o write.o OUTPUT = io MODULE = io.ko diff --git a/sys/io/main.c b/sys/io/main.c index ab19875..3e2b2fb 100644 --- a/sys/io/main.c +++ b/sys/io/main.c @@ -6,15 +6,31 @@ #include #include "pipe.h" -static int _handle_msg(struct cxmsg *msg) +ssize_t sys_read(const pid_t, struct cxio_read*); +ssize_t sys_write(const pid_t, struct cxio_write*); + +static void _handle_msg(struct cxmsg *msg) { - int ret_val; char str[128]; int len; switch(msg->cm_type) { case CXIO_READ: + memset(str, 0, sizeof(str)); + len = snprintf(str, sizeof(str), "CXIO_READ from pid %u\n", msg->cm_src); + debug(str, len); + + sys_read(msg->cm_src, (struct cxio_read*)msg->cm_data); + break; + case CXIO_WRITE: + memset(str, 0, sizeof(str)); + len = snprintf(str, sizeof(str), "CXIO_WRITE from pid %u\n", msg->cm_src); + debug(str, len); + + sys_write(msg->cm_src, (struct cxio_write*)msg->cm_data); + break; + case CXIO_OPEN: case CXIO_CLOSE: default: @@ -22,20 +38,18 @@ static int _handle_msg(struct cxmsg *msg) len = snprintf(str, sizeof(str), "Unhandled message TYPE=0x%x SRC=%u\n", msg->cm_type, msg->cm_src); debug(str, len); - - ret_val = -ENOSYS; break; case CXIO_PIPE: - sys_pipe(msg->cm_src, (struct cxio_pipe*)msg->cm_data); memset(str, 0, sizeof(str)); - len = snprintf(str, sizeof(str), "CXIO_PIPE from %u\n", msg->cm_src); + len = snprintf(str, sizeof(str), "CXIO_PIPE from pid %u\n", msg->cm_src); debug(str, len); - ret_val = -ENOSYS; + + sys_pipe(msg->cm_src, (struct cxio_pipe*)msg->cm_data); break; } - return(ret_val); + return; } int main(int argc, char *argv[])