summaryrefslogtreecommitdiff
path: root/newlib/addon/newlib/libc/sys/hurd/readr.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/addon/newlib/libc/sys/hurd/readr.c')
-rw-r--r--newlib/addon/newlib/libc/sys/hurd/readr.c18
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