summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bsp/libwrap/libwrap.mk3
-rw-r--r--bsp/libwrap/sys/puts.c26
2 files changed, 28 insertions, 1 deletions
diff --git a/bsp/libwrap/libwrap.mk b/bsp/libwrap/libwrap.mk
index 313ed00..ce224ac 100644
--- a/bsp/libwrap/libwrap.mk
+++ b/bsp/libwrap/libwrap.mk
@@ -26,6 +26,7 @@ LIBWRAP_SRCS := \
sys/times.c \
sys/sbrk.c \
sys/_exit.c \
+ sys/puts.c \
misc/write_hex.c
LIBWRAP_SRCS := $(foreach f,$(LIBWRAP_SRCS),$(LIBWRAP_DIR)/$(f))
@@ -34,7 +35,7 @@ LIBWRAP_OBJS := $(LIBWRAP_SRCS:.c=.o)
LIBWRAP_SYMS := malloc free \
open lseek read write fstat stat close link unlink \
execve fork getpid kill wait \
- isatty times sbrk _exit
+ isatty times sbrk _exit puts
LIBWRAP := libwrap.a
diff --git a/bsp/libwrap/sys/puts.c b/bsp/libwrap/sys/puts.c
new file mode 100644
index 0000000..f77f1a3
--- /dev/null
+++ b/bsp/libwrap/sys/puts.c
@@ -0,0 +1,26 @@
+/* See LICENSE of license details. */
+
+#include <stdint.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#include "platform.h"
+#include "stub.h"
+
+int __wrap_puts(const char *s)
+{
+ while (*s != '\0') {
+ while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ;
+ UART0_REG(UART_REG_TXFIFO) = *s;
+
+ if (*s == '\n') {
+ while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ;
+ UART0_REG(UART_REG_TXFIFO) = '\r';
+ }
+
+ ++s;
+ }
+
+ return 0;
+}