commit a110557102655a546caa7f578b1804407ccdf8e5
parent 53c6ad2c93c5468c14cf32746b5860d30bad86d2
Author: Roberto Vargas <roberto.vargas@arm.com>
Date: Tue, 13 Nov 2018 10:50:47 +0000
[libc/libk] Add _read() in arm64
Change-Id: If98a252ec491e3194137c83c22c2e66d0b85b40b
Diffstat:
6 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/drivers/uart.c b/drivers/uart.c
@@ -97,23 +97,25 @@ uartputc(int c)
}
int
-uartread(char *buf, size_t siz)
+uartread(void *buf, size_t siz)
{
size_t i;
+ char *ptr = buf;
for (i = 0; i < siz; i++)
- if ((buf[i] = uartgetc()) < 0)
+ if ((ptr[i] = uartgetc()) < 0)
return i;
return siz;
}
int
-uartwrite(const char *buf, size_t siz)
+uartwrite(const void *buf, size_t siz)
{
size_t i;
+ char *ptr = buf;
for (i = 0; i < siz; i++)
- if (uartputc(buf[i]) < 0)
+ if (uartputc(ptr[i]) < 0)
return i;
flush();
return siz;
diff --git a/include/uart.h b/include/uart.h
@@ -3,5 +3,5 @@
extern void uartinit(unsigned clkrate, unsigned baudrate);
extern int uartgetc(void);
extern int uartputc(int c);
-extern int uartread(char *buf, size_t siz);
-extern int uartwrite(const char *buf, size_t siz);
+extern int uartread(void *buf, size_t siz);
+extern int uartwrite(const void *buf, size_t siz);
diff --git a/src/libc/arch/arm64/rmode/Makefile b/src/libc/arch/arm64/rmode/Makefile
@@ -6,6 +6,7 @@ include ../../rules.mk
OBJS = _Exit.o \
raise.o \
_write.o \
- _sys_errlist.o \
+ _sys_errlist.o \
+ _read.o \
all: $(OBJS)
diff --git a/src/libc/arch/arm64/rmode/_read.c b/src/libc/arch/arm64/rmode/_read.c
@@ -0,0 +1,9 @@
+#include <uart.h>
+
+#include "../../../syscall.h"
+
+int
+_read(int fd, void *buf, size_t n)
+{
+ return uartread(buf, n);
+}
diff --git a/src/libc/arch/arm64/rmode/_write.c b/src/libc/arch/arm64/rmode/_write.c
@@ -1,5 +1,3 @@
-#include <stddef.h>
-
#include <uart.h>
#include "../../../syscall.h"
diff --git a/src/libk/kgetc-rmode.c b/src/libk/kgetc-rmode.c
@@ -1,12 +1,12 @@
+#include <stdio.h>
+
#include <uart.h>
#include <rcode.h>
int
kgetc(void)
{
- int ch;
+ char ch;
- while ((ch = uartgetc()) == -1)
- ;
- return ch;
+ return (_read(0, &ch, 1) < 0) ? EOF : 1;
}