9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Mdrivers/uart.c | 10++++++----
Minclude/uart.h | 4++--
Msrc/libc/arch/arm64/rmode/Makefile | 3++-
Asrc/libc/arch/arm64/rmode/_read.c | 9+++++++++
Msrc/libc/arch/arm64/rmode/_write.c | 2--
Msrc/libk/kgetc-rmode.c | 8++++----
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; }