From 5415686b41adb8c75a6c1da999aeddd6894b3010 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Wed, 14 May 2025 11:53:11 -0600 Subject: libmisc: _intercept.h: Have __lm_printf return size_t instead of int --- libmisc/tests/test_log.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libmisc/tests/test_log.c') diff --git a/libmisc/tests/test_log.c b/libmisc/tests/test_log.c index 02b95d6..1468b5a 100644 --- a/libmisc/tests/test_log.c +++ b/libmisc/tests/test_log.c @@ -21,10 +21,10 @@ static char *log_output = NULL; -int __lm_printf(const char *format, ...) { +size_t __lm_printf(const char *format, ...) { va_list va; va_start(va, format); - int ret = vasprintf(&log_output, format, va); + size_t ret = (size_t) vasprintf(&log_output, format, va); va_end(va); return ret; } -- cgit v1.2.3-2-g168b From f01b89b599d40df5d6c127310b0030cd41c8dc85 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Tue, 13 May 2025 18:46:08 -0600 Subject: libmisc: log.h: Add support for libmisc/fmt.h printing --- libmisc/tests/test_log.c | 95 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 70 insertions(+), 25 deletions(-) (limited to 'libmisc/tests/test_log.c') diff --git a/libmisc/tests/test_log.c b/libmisc/tests/test_log.c index 1468b5a..e5abb61 100644 --- a/libmisc/tests/test_log.c +++ b/libmisc/tests/test_log.c @@ -4,11 +4,10 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -#define _GNU_SOURCE /* for vasprintf() */ #include /* for va_list */ -#include /* for vasprintf() */ -#include /* for free() */ -#include /* for strcmp() */ +#include /* for vsnprintf() */ +#include /* for realloc(), free() */ +#include /* for strlen(), strcmp() */ #define LOG_NAME FROBNICATE #include @@ -19,40 +18,63 @@ /* Intercept output ***********************************************************/ -static char *log_output = NULL; +static struct fmt_buf log_output = {}; size_t __lm_printf(const char *format, ...) { + restart: va_list va; va_start(va, format); - size_t ret = (size_t) vasprintf(&log_output, format, va); + size_t ret = (size_t) vsnprintf(log_output.dat, log_output.cap, format, va); va_end(va); + + if (ret > log_output.cap) { + log_output.cap = ret+8; + log_output.dat = realloc(log_output.dat, log_output.cap); + memset(log_output.dat, 0, log_output.cap); + goto restart; + } + log_output.len = ret; return ret; } +void __lm_putchar(unsigned char c) { + if (log_output.len+1 >= log_output.cap) { + log_output.cap += 16; + log_output.dat = realloc(log_output.dat, log_output.cap); + memset(log_output.dat + log_output.len, 0, log_output.cap - log_output.len); + } + ((uint8_t *)log_output.dat)[log_output.len++] = (uint8_t)c; +} + +static void log_output_clear(void) { + if (log_output.dat) + memset(log_output.dat, 0, log_output.cap); + log_output.len = 0; +} + /* Actual tests ***************************************************************/ -#define should_print(_exp, cmd) do { \ - char *exp = _exp; \ - test_assert(!log_output); \ - cmd; \ - if (!exp) \ - test_assert(!log_output); \ - else { \ - test_assert(log_output); \ - if (strcmp(log_output, exp)) { \ - printf("exp = \"%s\"\n" \ - "act = \"%s\"\n", \ - exp, log_output); \ - test_assert(0); \ - } \ - } \ - if (log_output) { \ - free(log_output); \ - log_output = NULL; \ - } \ +#define should_print(_exp, cmd) do { \ + char *exp = _exp; \ + test_assert(log_output.len == 0); \ + cmd; \ + if (!exp) \ + test_assert(log_output.len == 0); \ + else { \ + test_assert(log_output.dat); \ + test_assert(strlen(log_output.dat) == log_output.len); \ + if (strcmp(log_output.dat, exp)) { \ + printf("exp = \"%s\"\n" \ + "act = \"%s\"\n", \ + exp, (char *)log_output.dat); \ + test_assert(0); \ + } \ + } \ + log_output_clear(); \ } while (0) int main() { + /* printf */ should_print("error: FROBNICATE: val=42\n", log_errorf("val=%d", 42)); should_print("info : FROBNICATE: val=0\n", @@ -65,6 +87,29 @@ int main() { #define CONFIG_FROBNICATE_DEBUG 0 should_print(NULL, log_debugf("val=%d", -2)); +#undef CONFIG_FROBNICATE_DEBUG +#endif + + /* libmisc/fmt.h */ + should_print("error: FROBNICATE: val=42\n", + log_errorln("val=", 42)); + should_print("info : FROBNICATE: val=0\n", + log_infoln("val=", 0)); +#ifndef NDEBUG +#define CONFIG_FROBNICATE_DEBUG 1 + should_print("debug: FROBNICATE: val=-2\n", + log_debugln("val=", -2)); +#undef CONFIG_FROBNICATE_DEBUG +#define CONFIG_FROBNICATE_DEBUG 0 + should_print(NULL, + log_debugln("val=", -2)); +#undef CONFIG_FROBNICATE_DEBUG #endif + + if (log_output.dat) { + free(log_output.dat); + log_output.dat = NULL; + log_output.cap = 0; + } return 0; } -- cgit v1.2.3-2-g168b From 3faaad9fe1f11cfe5699c6720c897bfddc7cf49a Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Thu, 15 May 2025 00:18:27 -0600 Subject: Begone with the printf variants of the log functions --- libmisc/tests/test_log.c | 34 ---------------------------------- 1 file changed, 34 deletions(-) (limited to 'libmisc/tests/test_log.c') diff --git a/libmisc/tests/test_log.c b/libmisc/tests/test_log.c index e5abb61..ee762e2 100644 --- a/libmisc/tests/test_log.c +++ b/libmisc/tests/test_log.c @@ -20,23 +20,6 @@ static struct fmt_buf log_output = {}; -size_t __lm_printf(const char *format, ...) { - restart: - va_list va; - va_start(va, format); - size_t ret = (size_t) vsnprintf(log_output.dat, log_output.cap, format, va); - va_end(va); - - if (ret > log_output.cap) { - log_output.cap = ret+8; - log_output.dat = realloc(log_output.dat, log_output.cap); - memset(log_output.dat, 0, log_output.cap); - goto restart; - } - log_output.len = ret; - return ret; -} - void __lm_putchar(unsigned char c) { if (log_output.len+1 >= log_output.cap) { log_output.cap += 16; @@ -74,23 +57,6 @@ static void log_output_clear(void) { } while (0) int main() { - /* printf */ - should_print("error: FROBNICATE: val=42\n", - log_errorf("val=%d", 42)); - should_print("info : FROBNICATE: val=0\n", - log_infof("val=%d", 0)); -#ifndef NDEBUG -#define CONFIG_FROBNICATE_DEBUG 1 - should_print("debug: FROBNICATE: val=-2\n", - log_debugf("val=%d", -2)); -#undef CONFIG_FROBNICATE_DEBUG -#define CONFIG_FROBNICATE_DEBUG 0 - should_print(NULL, - log_debugf("val=%d", -2)); -#undef CONFIG_FROBNICATE_DEBUG -#endif - - /* libmisc/fmt.h */ should_print("error: FROBNICATE: val=42\n", log_errorln("val=", 42)); should_print("info : FROBNICATE: val=0\n", -- cgit v1.2.3-2-g168b