From 70184242780a2e0a64284db80948172bf4c34976 Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Tue, 2 Sep 2025 00:17:12 +0200 Subject: [PATCH] stdio kprintf working --- kern/libkern/stdio.c | 20 ++++++++++++++++++++ kern/libkern/stdio.h | 18 ++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 kern/libkern/stdio.c create mode 100644 kern/libkern/stdio.h diff --git a/kern/libkern/stdio.c b/kern/libkern/stdio.c new file mode 100644 index 0000000..d02e59b --- /dev/null +++ b/kern/libkern/stdio.c @@ -0,0 +1,20 @@ +#include +#include +#include + +int stdout_puts(char *s, int len, void *unused) { + (void)unused; + // Example: UART write loop + for (int i = 0; i < len; i++) { + uart_putc(s[i]); // <-- your low-level "put char" routine + } + return len; +} + +int kprintf(const char *restrict fmt, ...) { + va_list ap; + va_start(ap, fmt); + int ret = mini_vpprintf(stdout_puts, NULL, fmt, ap); + va_end(ap); + return ret; +} diff --git a/kern/libkern/stdio.h b/kern/libkern/stdio.h new file mode 100644 index 0000000..2602c87 --- /dev/null +++ b/kern/libkern/stdio.h @@ -0,0 +1,18 @@ +#ifndef STDIO_H +#define STDIO_H + +int stdout_puts(char *s, int len, void *unused); +int kprintf(const char *restrict format, ...); + +// int fprintf(FILE *restrict stream, const char *restrict format, ...); +// int dprintf(int fd, const char *restrict format, ...); +// int sprintf(char *restrict str, const char *restrict format, ...); +// int snprintf(char str[restrict.size], size_t size, const char *restrict format, ...); + +// int vprintf(const char *restrict format, va_list ap); +// int vfprintf(FILE *restrict stream, const char *restrict format, va_list ap); +// int vdprintf(int fd, const char *restrict format, va_list ap); +// int vsprintf(char *restrict str, const char *restrict format, va_list ap); +// int vsnprintf(char str[restrict.size], size_t size, const char *restrict format, va_list ap); + +#endif // STDIO_H