gateway: fix serialize_gw_speed
authorFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 19 Jul 2012 07:46:48 +0000 (09:46 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 19 Jul 2012 07:53:56 +0000 (09:53 +0200)
Values over 320000000 would serialize to 0, which is not correct,
since they should be clipped to the maximum value of the
serialization range.

v2: unchanged, sent with another patch

v3: values 100000000 and 200000000 would result in an exponent of 8,
    which is out-of-range for the exponent.

Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
src/gateway.c

index 048a7cb..ee122b7 100644 (file)
@@ -62,11 +62,15 @@ static uint8_t
 serialize_gw_speed(uint32_t speed) {
   uint8_t exp = 0;
 
-  if (speed == 0 || speed > 320000000) {
+  if (speed == 0) {
     return 0;
   }
 
-  while (speed > 32 || (speed % 10) == 0) {
+  if (speed > 320000000) {
+    return 0xff;
+  }
+
+  while ((speed > 32 || (speed % 10) == 0) && exp < 7) {
     speed /= 10;
     exp ++;
   }