From aeb12302660810e8e4d5f7ac5604a604a68c1422 Mon Sep 17 00:00:00 2001 From: Juergen Fitschen Date: Tue, 12 May 2020 17:39:25 +0200 Subject: [PATCH] sys/fmt: add fmt_hex_bytes size probing --- sys/fmt/fmt.c | 5 +++++ tests/unittests/tests-fmt/tests-fmt.c | 3 +++ 2 files changed, 8 insertions(+) diff --git a/sys/fmt/fmt.c b/sys/fmt/fmt.c index 0d012ed1cc46..ae47fbf3875d 100644 --- a/sys/fmt/fmt.c +++ b/sys/fmt/fmt.c @@ -160,6 +160,11 @@ size_t fmt_hex_bytes(uint8_t *out, const char *hex) } size_t final_len = len >> 1; + + if (out == NULL) { + return final_len; + } + for (size_t i = 0, j = 0; j < final_len; i += 2, j++) { out[j] = fmt_hex_byte(hex + i); } diff --git a/tests/unittests/tests-fmt/tests-fmt.c b/tests/unittests/tests-fmt/tests-fmt.c index e321dc99cc1b..75138a986c40 100644 --- a/tests/unittests/tests-fmt/tests-fmt.c +++ b/tests/unittests/tests-fmt/tests-fmt.c @@ -176,6 +176,9 @@ static void test_fmt_hex_bytes(void) TEST_ASSERT_EQUAL_INT(0, val); TEST_ASSERT_EQUAL_INT(0, bytes); + bytes = fmt_hex_bytes(NULL, "ABCDEF"); + TEST_ASSERT_EQUAL_INT(3, bytes); + char hex2[3] = "00"; uint8_t val1[1] = { 0 }; bytes = fmt_hex_bytes(val1, hex2);