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