summaryrefslogtreecommitdiff
path: root/viengoos/server.c
diff options
context:
space:
mode:
authorneal <neal>2008-10-08 16:07:58 +0000
committerneal <neal>2008-10-08 16:07:58 +0000
commit8ab8295384ace533b8f17260b07e74327995658e (patch)
treede8c28bc557b30c28028ef3141b54c05ae00acaf /viengoos/server.c
parentdc9064e55f993d79c6ed1ca7093812eaa2fececd (diff)
viengoos/origin
2008-10-08 Neal H. Walfield <neal@gnu.org> * rm.h (enum rm_method_id): Add RM_read. (rm_method_id_string): Handle it. (read): New RPC. * server.c (server_loop): Implement the read RPC. newlib/ 2008-10-08 Neal H. Walfield <neal@gnu.org> * addon/newlib/libc/sys/hurd/readr.c: Include <hurd/rm.h>. (read): Implement.
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;