From 32407e728971006ed3d0885e01c22fb66c8adc57 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 15 Jul 2016 23:12:14 +0200 Subject: Move stuff around, again --- src/lib/libc/stdio.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/lib/libc/stdio.c (limited to 'src/lib/libc/stdio.c') diff --git a/src/lib/libc/stdio.c b/src/lib/libc/stdio.c new file mode 100644 index 0000000..22be78e --- /dev/null +++ b/src/lib/libc/stdio.c @@ -0,0 +1,63 @@ +#include +#include + +#include +#include + + +fd_t stdio = 1; + +int getchar() { + char chr; + size_t sz = read(stdio, 0, 1, &chr); + ASSERT(sz == 1); + return chr; +} + + +int putchar(int c) { + char chr = c; + write(stdio, 0, 1, &chr); + return 0; //TODO what? +} + +int puts(const char* s) { + // TODO return EOF on error + return write(stdio, 0, strlen(s), s); +} + +void getline(char* buf, size_t l) { + size_t i = 0; + while (true) { + int c = getchar(); + if (c == '\n') { + putchar('\n'); + buf[i] = 0; + break; + } else if (c == '\b') { + if (i > 0) { + i--; + putchar('\b'); + } + } else if (c >= ' ') { + buf[i] = c; + if (i < l-1) { + i++; + putchar(c); + } + } + } +} + +int printf(const char* fmt, ...) { + va_list ap; + char buffer[256]; + + va_start(ap, fmt); + vsnprintf(buffer, 256, fmt, ap); + va_end(ap); + + return puts(buffer); +} + +/* vim: set ts=4 sw=4 tw=0 noet :*/ -- cgit v1.2.3