9os

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

commit d996b4b37aafdb339941459b9d5a4b1445fd9cb7
parent edce04c86b297ce915e51ad6690f4e92a8e220aa
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date:   Wed, 21 Nov 2018 13:52:39 +0000

Merge changes from topic 'rv/dlang'

* changes:
  [libk] Add kvprint()
  [libk] Add kputs()
  [arch/amd64] Split the list of object files
  [libk] Add kputc()
  [libk] Unify all the kgetc() functions

Diffstat:
March/amd64/Makefile | 15+++++++++++++--
Minclude/rcode.h | 4++++
Msrc/libk/Makefile | 5++++-
Msrc/libk/doprnt.c | 4++--
Dsrc/libk/kgetc-dragonfly.c | 1-
Dsrc/libk/kgetc-linux.c | 1-
Dsrc/libk/kgetc-netbsd.c | 1-
Dsrc/libk/kgetc-openbsd.c | 1-
Dsrc/libk/kgetc-posix.c | 7-------
Dsrc/libk/kgetc-rcode.c | 14--------------
Asrc/libk/kgetc.c | 13+++++++++++++
Asrc/libk/kputc.c | 13+++++++++++++
Asrc/libk/kputs.c | 11+++++++++++
Asrc/libk/kvprint.c | 20++++++++++++++++++++
14 files changed, 80 insertions(+), 30 deletions(-)

diff --git a/arch/amd64/Makefile b/arch/amd64/Makefile @@ -2,8 +2,19 @@ PROJECTDIR = ../.. include $(PROJECTDIR)/scripts/rules.mk -ROMOBJS = crt-$(SYS).o arch.o rom.o bss.o $(DLANG) $(SRCDIR)/romfw/builtin.o -RAMOBJS = crt-$(SYS).o arch.o ram.o bss.o $(DLANG) $(SRCDIR)/ramfw/builtin.o +ROMOBJS = crt-$(SYS).o \ + arch.o \ + rom.o \ + bss.o \ + $(DLANG) \ + $(SRCDIR)/romfw/builtin.o \ + +RAMOBJS = crt-$(SYS).o \ + arch.o \ + ram.o \ + bss.o \ + $(DLANG) \ + $(SRCDIR)/ramfw/builtin.o \ TARGET = $(BINDIR)/romfw.elf $(BINDIR)/ramfw.elf diff --git a/include/rcode.h b/include/rcode.h @@ -1,4 +1,5 @@ #include <setjmp.h> +#include <stdarg.h> #include <stddef.h> #include <stdint.h> @@ -196,6 +197,9 @@ extern int kprint(const char *fmt, ...) KPRINTFMT; extern int ksnprint(char *str, size_t len, const char *fmt, ...) KSNPRINTFMT; extern char *kgetln(char *s, int n); extern int kgetc(void); +extern int kputc(int ch); +extern int kputs(const char *s); +extern int kvprint(const char *fmt, va_list va); /* architectural functions */ extern _Noreturn void dohalt(void); diff --git a/src/libk/Makefile b/src/libk/Makefile @@ -5,7 +5,10 @@ include $(PROJECTDIR)/scripts/rules.mk OBJS = doprnt.o \ kprint.o \ ksnprint.o \ - kgetc-$(SYS).o \ + kgetc.o \ + kputc.o \ + kputs.o \ + kvprint.o \ kgetln.o \ __assert.o \ diff --git a/src/libk/doprnt.c b/src/libk/doprnt.c @@ -1,5 +1,6 @@ #include <stdarg.h> #include <stddef.h> +#include <rcode.h> #include <rcode.h> @@ -15,8 +16,7 @@ putch(Stream *sp, int c) if (sp->cnt < sp->len) sp->base[sp->cnt++] = c; } else { - ch = c; - _write(sp->fd, &ch, 1); + kputc(ch); sp->cnt++; } } diff --git a/src/libk/kgetc-dragonfly.c b/src/libk/kgetc-dragonfly.c @@ -1 +0,0 @@ -#include "kgetc-posix.c" diff --git a/src/libk/kgetc-linux.c b/src/libk/kgetc-linux.c @@ -1 +0,0 @@ -#include "kgetc-posix.c" diff --git a/src/libk/kgetc-netbsd.c b/src/libk/kgetc-netbsd.c @@ -1 +0,0 @@ -#include "kgetc-posix.c" diff --git a/src/libk/kgetc-openbsd.c b/src/libk/kgetc-openbsd.c @@ -1 +0,0 @@ -#include "kgetc-posix.c" diff --git a/src/libk/kgetc-posix.c b/src/libk/kgetc-posix.c @@ -1,7 +0,0 @@ -#include <stdio.h> - -int -kgetc(void) -{ - return getc(stdin); -} diff --git a/src/libk/kgetc-rcode.c b/src/libk/kgetc-rcode.c @@ -1,14 +0,0 @@ -#include <stdio.h> - -#include <uart.h> -#include <rcode.h> - -#include "../libc/syscall.h" - -int -kgetc(void) -{ - char ch; - - return (_read(0, &ch, 1) < 0) ? EOF : 1; -} diff --git a/src/libk/kgetc.c b/src/libk/kgetc.c @@ -0,0 +1,13 @@ +#include <stdio.h> + +#include <rcode.h> + +#include "../libc/syscall.h" + +int +kgetc(void) +{ + char ch; + + return (_read(0, &ch, 1) < 0) ? EOF : ch; +} diff --git a/src/libk/kputc.c b/src/libk/kputc.c @@ -0,0 +1,13 @@ +#include <stdio.h> + +#include <rcode.h> + +#include "../libc/syscall.h" + +int +kputc(int ch) +{ + char c = ch; + + return (_write(0, &c, 1) < 0) ? EOF : 1; +} diff --git a/src/libk/kputs.c b/src/libk/kputs.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +#include <rcode.h> + +int +kputs(const char *s) +{ + for ( ; *s && kputc(*s) != EOF; ++s) + ; + return (*s != '\0') ? EOF : 0; +} diff --git a/src/libk/kvprint.c b/src/libk/kvprint.c @@ -0,0 +1,20 @@ +#include <stdarg.h> +#include <stddef.h> + +#include "libk.h" + +int +kvprint(const char *fmt, va_list va) +{ + va_list ap; + Stream stream; + + va_copy(ap, va); + stream.fd = 1; + stream.base = NULL; + stream.len = 0; + stream.cnt = 0; + doprnt(&stream, fmt, ap); + + return stream.cnt; +}