diff options
Diffstat (limited to 'bsp/libwrap/sys/read.c')
-rw-r--r-- | bsp/libwrap/sys/read.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/bsp/libwrap/sys/read.c b/bsp/libwrap/sys/read.c new file mode 100644 index 0000000..4e57f08 --- /dev/null +++ b/bsp/libwrap/sys/read.c @@ -0,0 +1,30 @@ +/* See LICENSE of license details. */ + +#include <stdint.h> +#include <errno.h> +#include <unistd.h> +#include <sys/types.h> + +#include "platform.h" +#include "stub.h" + +ssize_t __wrap_read(int fd, void* ptr, size_t len) +{ + uint8_t * current = (uint8_t *)ptr; + volatile uint32_t * uart_rx = (uint32_t *)(UART0_BASE_ADDR + UART_REG_RXFIFO); + volatile uint8_t * uart_rx_cnt = (uint8_t *)(UART0_BASE_ADDR + UART_REG_RXCTRL + 2); + + ssize_t result = 0; + + if (isatty(fd)) { + for (current = (uint8_t *)ptr; + (current < ((uint8_t *)ptr) + len) && (*uart_rx_cnt > 0); + current ++) { + *current = *uart_rx; + result++; + } + return result; + } + + return _stub(EBADF); +} |