From f79603c7780af124790802ca0cc375d862220aaf Mon Sep 17 00:00:00 2001 From: Tom-on64 Date: Mon, 26 Aug 2024 21:15:35 +0200 Subject: [PATCH] Added stdarg.h --- include/c/_printf.h | 14 ++++++++------ include/c/stdarg.h | 10 ++++++++++ kern.iso | Bin 1470464 -> 1470464 bytes 3 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 include/c/stdarg.h diff --git a/include/c/_printf.h b/include/c/_printf.h index e2d838b..0c0a85c 100644 --- a/include/c/_printf.h +++ b/include/c/_printf.h @@ -3,10 +3,12 @@ #include #include +#include // TODO: Support negative numbers int printf(const char* fmt, ...) { - unsigned int* argPtr = (unsigned int*)&fmt + 1; // First arg after fmt + va_list args; + va_start(args, fmt); // Printing buffer static char* buffer; @@ -35,23 +37,22 @@ int printf(const char* fmt, ...) { } else if (state == '%') { switch (c) { case 'd': // Decimal number - strcat(buffer, itoa(*argPtr++, 10)); + strcat(buffer, itoa(va_arg(args, int), 10)); len += strlen(&buffer[len]); // Add the remaining length break; case 'x': // Hex number - strcat(buffer, itoa(*argPtr++, 16)); + strcat(buffer, itoa(va_arg(args, int), 16)); len += strlen(&buffer[len]); break; case 's': // String - char* s = *(char**)argPtr++; + char* s = va_arg(args, char*); while (*s != '\0') { buffer[len++] = *s++; } break; case 'c': // Char - buffer[len++] = *(char*)argPtr; - argPtr++; + buffer[len++] = va_arg(args, char); break; default: // This looks insane buffer[len++] = '%'; @@ -66,6 +67,7 @@ int printf(const char* fmt, ...) { buffer[len] = '\0'; write(1, buffer, len); free(buffer); + va_end(args); return 0; } diff --git a/include/c/stdarg.h b/include/c/stdarg.h new file mode 100644 index 0000000..c5f3ec8 --- /dev/null +++ b/include/c/stdarg.h @@ -0,0 +1,10 @@ +#ifndef STDARG_H +#define STDARG_H + +typedef char* va_list; +#define va_start(ap, paramn) (void)((ap) = (char*)(&(paramn) + 1)) +#define va_end(ap) (void)((ap) = 0) +#define va_arg(ap, type) (((type*)((ap) = ((ap) + sizeof(type))))[-1]) + +#endif + diff --git a/kern.iso b/kern.iso index 8017d13fd70914a7c8368dcd28b3bb5d48c15b09..7245df411f2226b9b5bde18a780e0df2a505c6cf 100644 GIT binary patch delta 2279 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 C+|ru>