commit b71df54443deaa7d24ba9768d3535cf55f90befd
parent 47366ed71af08ac7f6a96f69762b402501df0d32
Author: Roberto Vargas <roberto.vargas@arm.com>
Date: Fri, 8 Mar 2019 10:33:02 +0000
[dlang] Fix do_cat()
Using kprint() with a buffer that is not guaranted to be null
terminated is a mistake.
Change-Id: I3c699d6eefd4543fe515ca2f9a8bd7d5a4b40784
Diffstat:
4 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/include/libk.h b/include/libk.h
@@ -12,5 +12,6 @@ extern int kgetc(void);
extern int kputc(int ch);
extern int kputs(const char *s);
extern int kvprint(const char *fmt, va_list va);
+extern int kwrite(char *buf, int n);
extern void kerror(const char *s);
extern int putenv(char *name);
diff --git a/src/libk/Makefile b/src/libk/Makefile
@@ -11,6 +11,7 @@ OBJS = doprnt.o \
kvprint.o \
kgets.o \
kerror.o \
+ kwrite.o \
putenv-$(MODE).o \
__assert.o \
diff --git a/src/libk/kwrite.c b/src/libk/kwrite.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+#include <libk.h>
+
+#include "../libc/syscall.h"
+
+int
+kwrite(char *buf, int n)
+{
+ return _write(1, buf, n);
+}
diff --git a/src/romfw/dlang.c b/src/romfw/dlang.c
@@ -219,7 +219,7 @@ do_cat(const struct cmd *cmd, struct args *args)
goto err;
while ((n = read(fd, buf, sizeof(buf))) > 0)
- kprint("%s", buf);
+ kwrite(buf, n);
if (close(fd) < 0 || n < 0)
goto err;