diff options
Diffstat (limited to 'newlib')
-rw-r--r-- | newlib/ChangeLog | 5 | ||||
-rw-r--r-- | newlib/addon/newlib/libc/sys/hurd/readr.c | 18 |
2 files changed, 21 insertions, 2 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 9d2c310..b1a8624 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,8 @@ +2008-10-08 Neal H. Walfield <neal@gnu.org> + + * addon/newlib/libc/sys/hurd/readr.c: Include <hurd/rm.h>. + (read): Implement. + 2008-06-27 Neal H. Walfield <neal@gnu.org> * Makefile.am (noinst_LIBRARIES): Remove variable. diff --git a/newlib/addon/newlib/libc/sys/hurd/readr.c b/newlib/addon/newlib/libc/sys/hurd/readr.c index bc1d6a0..1177a41 100644 --- a/newlib/addon/newlib/libc/sys/hurd/readr.c +++ b/newlib/addon/newlib/libc/sys/hurd/readr.c @@ -4,11 +4,25 @@ #include <unistd.h> #include <errno.h> +#include <hurd/rm.h> + _ssize_t read (int fd, void *buf, size_t cnt) { - errno = EOPNOTSUPP; - return -1; + if (fd != 0) + { + errno = EBADF; + return -1; + } + + if (cnt == 0) + return 0; + + struct io_buffer buffer; + rm_read (cnt, &buffer); + + memcpy (buf, buffer.data, buffer.len); + return buffer.len; } _ssize_t |