aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-03-24 15:16:00 -0400
committerKevin O'Connor <kevin@koconnor.net>2017-03-24 15:31:26 -0400
commitf28eb902df59472c50af95bde64296b9ba861735 (patch)
tree81095dd39c9d4523bd47d14a7b40f4877d212a8b
parent9702d522a46500bdfbfd58d4fa28e4eb6ec6f5b7 (diff)
downloadkutter-f28eb902df59472c50af95bde64296b9ba861735.tar.gz
kutter-f28eb902df59472c50af95bde64296b9ba861735.tar.xz
kutter-f28eb902df59472c50af95bde64296b9ba861735.zip
command: Fix encoding of 16bit signed integers
The code wasn't properly sign-extending 16bit integers which caused int16_t reports in output() to appear as uint16_t. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--src/command.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/command.c b/src/command.c
index 2d00aaf4..a1ea4a7c 100644
--- a/src/command.c
+++ b/src/command.c
@@ -139,15 +139,17 @@ _sendf(uint8_t parserid, ...)
param_types++;
uint32_t v;
switch (t) {
- case PT_uint32:
- case PT_int32:
+ case PT_byte:
case PT_uint16:
+ v = va_arg(args, unsigned int);
+ goto encode_int;
case PT_int16:
- case PT_byte:
- if (t >= PT_uint16)
- v = va_arg(args, int) & 0xffff;
- else
- v = va_arg(args, uint32_t);
+ v = (int32_t)va_arg(args, int);
+ goto encode_int;
+ case PT_uint32:
+ case PT_int32:
+ v = va_arg(args, uint32_t);
+ encode_int:
p = encode_int(p, v);
break;
case PT_string: {