From 578c4bfb22dd2df3c8133066b28397725b76734a Mon Sep 17 00:00:00 2001 From: Jon Griffiths Date: Tue, 31 May 2016 00:39:10 +1200 Subject: [PATCH] hex: Simplify hex_encode The documentation for hex_encode indicates that it returns simply true or false. The old implementation was returning the written length on success, cast to boolean. This will elicit a warning under MSVC. On further examination, there is no need to check/modify the length inside the loop, since we can check it once before starting. As a result the code can be simplified a bit. A side affect of this change is that nothing will be written at all if the length is incorrect, vs the previous code writing characters until the length available is exhausted. I prefer the new semantics but YMMV. Signed-off-by: Jon Griffiths --- ccan/str/hex/hex.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/ccan/str/hex/hex.c b/ccan/str/hex/hex.c index fd4074f3..6e031779 100644 --- a/ccan/str/hex/hex.c +++ b/ccan/str/hex/hex.c @@ -50,21 +50,17 @@ static char hexchar(unsigned int val) bool hex_encode(const void *buf, size_t bufsize, char *dest, size_t destsize) { - size_t used = 0; + size_t i; - if (destsize < 1) + if (destsize < hex_str_size(bufsize)) return false; - while (used < bufsize) { - unsigned int c = ((const unsigned char *)buf)[used]; - if (destsize < 3) - return false; + for (i = 0; i < bufsize; i++) { + unsigned int c = ((const unsigned char *)buf)[i]; *(dest++) = hexchar(c >> 4); *(dest++) = hexchar(c & 0xF); - used++; - destsize -= 2; } *dest = '\0'; - return used + 1; + return true; } -- 2.39.2