From 3bcb9c7df47938b05dbf5ac86bc81633193c6b12 Mon Sep 17 00:00:00 2001 From: Steins7 Date: Mon, 15 Apr 2024 17:17:23 +0200 Subject: [PATCH] Add error handling --- srv/format.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/srv/format.c b/srv/format.c index 2694d02..f3bc2c1 100644 --- a/srv/format.c +++ b/srv/format.c @@ -81,27 +81,37 @@ static uint32_t render_format(FormatCallback callback, void* arg, if (in_format) { switch (*c) { case '%': - callback('%', arg); + if (callback('%', arg)) return 1; break; case 'c': - callback((uint8_t)va_arg(va, uint32_t), arg); + if (callback((uint8_t)va_arg(va, uint32_t), arg)) { + return 1; + } break; case 's': { const char* str = va_arg(va, const char*); for (const char* c2 = str; *c2 != '\0'; ++c2) { - callback(*c2, arg); + if (callback(*c2, arg)) return 1; } } break; case 'i': - render_signed(callback, arg, va_arg(va, int32_t), 10); + if (render_signed(callback, arg, va_arg(va, int32_t), 10)) { + return 1; + } break; case 'u': - render_unsigned(callback, arg, va_arg(va, uint32_t), 10); + if (render_unsigned(callback, arg, + va_arg(va, uint32_t), 10)) { + return 1; + } break; case 'x': - render_unsigned(callback, arg, va_arg(va, uint32_t), 16); + if (render_unsigned(callback, arg, + va_arg(va, uint32_t), 16)) { + return 1; + } break; default: //TODO manage error @@ -113,7 +123,7 @@ static uint32_t render_format(FormatCallback callback, void* arg, in_format = true; continue; default: - callback(*c, arg); + if (callback(*c, arg)) return 1; break; } } @@ -154,9 +164,9 @@ static uint32_t render_unsigned(FormatCallback callback, void* arg, } if (digit < 10) { - callback('0' + digit, arg); + if (callback('0' + digit, arg)) return 1; } else { - callback('A' + digit - 10, arg); + if (callback('A' + digit - 10, arg)) return 1; } }