From d67f962a386af60d495cf17789436fa352c9dfe9 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Sun, 26 Mar 2017 21:51:58 -0400 Subject: [PATCH] command: Simplify sendf() switch Commit f28eb902 reworked the switch to fix int16 encoding. However, at least one version of avr gcc doesn't like that switch layout (it uses a jump table). Reorg the switch to avoid that issue. Signed-off-by: Kevin O'Connor --- src/command.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/command.c b/src/command.c index a1ea4a7c..a5306f3b 100644 --- a/src/command.c +++ b/src/command.c @@ -139,17 +139,18 @@ _sendf(uint8_t parserid, ...) param_types++; uint32_t v; switch (t) { - case PT_byte: - case PT_uint16: - v = va_arg(args, unsigned int); - goto encode_int; - case PT_int16: - v = (int32_t)va_arg(args, int); - goto encode_int; case PT_uint32: case PT_int32: - v = va_arg(args, uint32_t); - encode_int: + case PT_uint16: + case PT_int16: + case PT_byte: + if (t >= PT_uint16) + if (t == PT_int16) + v = (int32_t)va_arg(args, int); + else + v = va_arg(args, unsigned int); + else + v = va_arg(args, uint32_t); p = encode_int(p, v); break; case PT_string: {