diff options
Diffstat (limited to 'newlib/addon/newlib/libc/sys/hurd/readr.c')
-rw-r--r-- | newlib/addon/newlib/libc/sys/hurd/readr.c | 18 |
1 files changed, 16 insertions, 2 deletions
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 |