From 1a3f555fca6ebcd530ec267b1b6f71a80cb0fcae Mon Sep 17 00:00:00 2001 From: Quinn Date: Sat, 12 Apr 2025 20:43:04 +0200 Subject: [PATCH] write error header file write a header for logging and abrubtly exiting the code. --- src/error.h | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/error.h diff --git a/src/error.h b/src/error.h new file mode 100644 index 0000000..381d5b2 --- /dev/null +++ b/src/error.h @@ -0,0 +1,57 @@ +#pragma once +#include +#include +#include +#include + +#include "util/atrb.h" + +#define ERROR_BUF_SIZE 128 + +atrb_nonnull(1) atrb_format(printf, 1, 2) extern inline void debug(char const*, ...); // prints a '\n' suffixed debug msg to stdout with a maximum buf size of @ref ERROR_BUF_SIZE +atrb_nonnull(1) atrb_format(printf, 1, 2) extern inline void info(char const*, ...); // prints a '\n' suffixed info msg to stdout with a maximum buf size of @ref ERROR_BUF_SIZE +atrb_nonnull(1) atrb_format(printf, 1, 2) extern inline void warn(char const*, ...); // prints a '\n' suffixed warn msg to stderr with a maximum buf size of @ref ERROR_BUF_SIZE +atrb_nonnull(1) atrb_format(printf, 1, 2) extern inline void error(char const*, ...); // prints a '\n' suffixed error msg to stderr with a maximum buf size of @ref ERROR_BUF_SIZE +atrb_nonnull(1) atrb_format(printf, 1, 2) noreturn extern inline void fatal(char const*, ...); // prints a '\n' suffixed fatal msg to stderr with a maximum buf size of @ref ERROR_BUF_SIZE and immediately aborts execution + +// macro to write fmt vardiac args to buf +#define WRITE_VA_ARGS(buf, fmt) \ + { \ + va_list args; \ + va_start(args, fmt); \ + vsnprintf(buf, ERROR_BUF_SIZE, fmt, args); \ + va_end(args); \ + }; + +extern inline void debug(char const* restrict fmt, ...) { + char buf[ERROR_BUF_SIZE] = {0}; + WRITE_VA_ARGS(buf, fmt); + printf("\033[95mD: \"%s\"\033[0m\n", buf); // reduced parameter use by not using fprintf +} + +extern inline void info(char const* fmt, ...) { + char buf[ERROR_BUF_SIZE] = {0}; + WRITE_VA_ARGS(buf, fmt); + printf("I: \"%s\"\n", buf); +} + +extern inline void warn(char const* fmt, ...) { + char buf[ERROR_BUF_SIZE] = {0}; + WRITE_VA_ARGS(buf, fmt); + fprintf(stderr, "\033[93mW: \"%s\"\033[0m\n", buf); +} + +extern inline void error(char const* fmt, ...) { + char buf[ERROR_BUF_SIZE] = {0}; + WRITE_VA_ARGS(buf, fmt); + fprintf(stderr, "\033[91mE: \"%s\"\033[0m\n", buf); +} + +extern inline void fatal(char const* fmt, ...) { + char buf[ERROR_BUF_SIZE] = {0}; + WRITE_VA_ARGS(buf, fmt); + fprintf(stderr, "\033[101mF: \"%s\"\033[0m\n", buf); + abort(); +} + +#undef WRITE_VA_ARGS