summaryrefslogtreecommitdiff
path: root/kernel/src/klibc/stdio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/klibc/stdio.cpp')
-rw-r--r--kernel/src/klibc/stdio.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/kernel/src/klibc/stdio.cpp b/kernel/src/klibc/stdio.cpp
new file mode 100644
index 0000000..7e8e283
--- /dev/null
+++ b/kernel/src/klibc/stdio.cpp
@@ -0,0 +1,34 @@
+#include <klibc/stdio.hpp>
+#include <klibc/string.hpp>
+#include <utils/flanterm.hpp>
+#include <cstdint>
+#include <cstddef>
+#include <cstdarg>
+
+#define NANOPRINTF_USE_FIELD_WIDTH_FORMAT_SPECIFIERS 1
+#define NANOPRINTF_USE_PRECISION_FORMAT_SPECIFIERS 1
+#define NANOPRINTF_USE_LARGE_FORMAT_SPECIFIERS 1
+#define NANOPRINTF_USE_SMALL_FORMAT_SPECIFIERS 1
+#define NANOPRINTF_USE_FLOAT_FORMAT_SPECIFIERS 0
+#define NANOPRINTF_USE_BINARY_FORMAT_SPECIFIERS 1
+#define NANOPRINTF_USE_WRITEBACK_FORMAT_SPECIFIERS 0
+#define NANOPRINTF_IMPLEMENTATION
+#include <nanoprintf.h>
+
+#include <cstdint>
+#include <cstddef>
+
+int klibc::_snprintf(char *buffer, std::size_t bufsz, char const *fmt, va_list vlist) {
+ int const rv = npf_vsnprintf(buffer, bufsz, fmt, vlist);
+ return rv;
+}
+
+void klibc::printf(const char* fmt, ...) {
+ va_list val;
+ va_start(val, fmt);
+ char buffer[4096];
+ memset(buffer,0,4096);
+ int len = _snprintf(buffer,4096,fmt,val);
+ utils::flanterm::write(buffer,len);
+ va_end(val);
+} \ No newline at end of file