summaryrefslogtreecommitdiff
path: root/viengoos/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'viengoos/server.c')
-rw-r--r--viengoos/server.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/viengoos/server.c b/viengoos/server.c
index 3b72606..81f5411 100644
--- a/viengoos/server.c
+++ b/viengoos/server.c
@@ -307,7 +307,7 @@ server_loop (void)
if (raise_fault)
{
- DEBUG (4, "fault (ip: %x; fault: %x.%c%s)!",
+ DEBUG (4, "Reflecting fault (ip: %x; fault: %x.%c%s)!",
ip, fault, w ? 'w' : 'r', discarded ? " discarded" : "");
l4_word_t c = _L4_XCHG_REGS_DELIVER;
@@ -527,6 +527,28 @@ server_loop (void)
do_reply = 0;
continue;
}
+ else if (label == RM_read)
+ {
+ int max;
+ err = rm_read_send_unmarshal (&msg, &max);
+ if (err)
+ {
+ debug (0, "Read error!");
+ REPLY (EINVAL);
+ }
+
+ struct io_buffer buffer;
+ buffer.len = 0;
+
+ if (max > 0)
+ {
+ buffer.len = 1;
+ buffer.data[0] = getchar ();
+ }
+
+ rm_read_reply_marshal (&msg, buffer);
+ continue;
+ }
do_reply = 1;