diff options
author | neal <neal> | 2008-10-08 16:07:58 +0000 |
---|---|---|
committer | neal <neal> | 2008-10-08 16:07:58 +0000 |
commit | 8ab8295384ace533b8f17260b07e74327995658e (patch) | |
tree | de8c28bc557b30c28028ef3141b54c05ae00acaf /viengoos/server.c | |
parent | dc9064e55f993d79c6ed1ca7093812eaa2fececd (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.c | 24 |
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; |