From c5cbf5d747c0d8249c162e075863ee55a804b6db Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Thu, 10 Apr 2025 23:21:40 -0400 Subject: make lib betterer --- kernel/include/lib/kio.h | 17 ++++++++++------- kernel/include/lib/klib.h | 9 ++++++++- 2 files changed, 18 insertions(+), 8 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/lib/kio.h b/kernel/include/lib/kio.h index 652a85b..ef22f95 100644 --- a/kernel/include/lib/kio.h +++ b/kernel/include/lib/kio.h @@ -31,8 +31,9 @@ void kputs(const char *s); * * @param format - the format string * @param ... - variable args for the format + * @returns number of bytes written */ -__attribute__((format(printf, 1, 2))) void kprintf(const char *format, ...); +__attribute__((format(printf, 1, 2))) int kprintf(const char *format, ...); /** * prints out a formatted string to a buffer @@ -42,7 +43,7 @@ __attribute__((format(printf, 1, 2))) void kprintf(const char *format, ...); * @param ... - variable args for the format * @returns number of bytes written */ -__attribute__((format(printf, 2, 3))) size_t ksprintf(char *restrict s, +__attribute__((format(printf, 2, 3))) int ksprintf(char *restrict s, const char *format, ...); /** @@ -53,8 +54,9 @@ __attribute__((format(printf, 2, 3))) size_t ksprintf(char *restrict s, * @param format - the format string * @param ... - variable args for the format * @returns number of bytes written + * @returns number of bytes that would of been written (past maxlen) */ -__attribute__((format(printf, 3, 4))) size_t ksnprintf(char *restrict s, +__attribute__((format(printf, 3, 4))) int ksnprintf(char *restrict s, size_t maxlen, const char *format, ...); @@ -63,8 +65,9 @@ __attribute__((format(printf, 3, 4))) size_t ksnprintf(char *restrict s, * * @param format - the format string * @param args - variable arg list for the format + * @returns number of bytes written */ -void kvprintf(const char *format, va_list args); +int kvprintf(const char *format, va_list args); /** * prints out a formatted string to a buffer @@ -74,7 +77,7 @@ void kvprintf(const char *format, va_list args); * @param args - variable arg list for the format * @returns number of bytes written */ -size_t kvsprintf(char *restrict s, const char *format, va_list args); +int kvsprintf(char *restrict s, const char *format, va_list args); /** * prints out a formatted string to a buffer with a given max length @@ -83,9 +86,9 @@ size_t kvsprintf(char *restrict s, const char *format, va_list args); * @param maxlen - the max len of the buffer * @param format - the format string * @param args - variable arg list for the format - * @returns number of bytes written + * @returns number of bytes that would of been written (past maxlen) */ -size_t kvsnprintf(char *restrict s, size_t maxlen, const char *format, +int kvsnprintf(char *restrict s, size_t maxlen, const char *format, va_list args); #endif /* kio.h */ diff --git a/kernel/include/lib/klib.h b/kernel/include/lib/klib.h index 3afe925..cb1de01 100644 --- a/kernel/include/lib/klib.h +++ b/kernel/include/lib/klib.h @@ -185,13 +185,20 @@ char *btoa(size_t bytes, char *buf); */ unsigned int bound(unsigned int min, unsigned int value, unsigned int max); +#define __PANIC_STR(x) __PANIC_STR2(x) +#define __PANIC_STR2(x) #x + +#define panic(...) __panic(__PANIC_STR(__LINE__), __FILE__, __VA_ARGS__) +#define assert(val, ...) do { if (!(val)) { panic(__VA_ARGS__); } } while (0) + /** * Abort the kernel with a given message. * * @param format - the format string * @param ... - variable args for the format */ -__attribute__((noreturn)) void panic(const char *format, ...); +__attribute__((noreturn, format(printf, 3, 4))) +void __panic(const char *line, const char *file, const char *format, ...); /** * Fill dst with a stack trace consisting of return addresses in order -- cgit v1.2.3-freya