From: Keith Packard Date: Fri, 6 Jun 2014 01:31:06 +0000 (-0700) Subject: altos: ao_distance was overflowing when checking for longitude wrap X-Git-Tag: 1.3.2.2~14 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=d7df6e8c47df35c0d27f1a2559ecc305ef28d271;p=fw%2Faltos altos: ao_distance was overflowing when checking for longitude wrap Need to shift everyone right one bit to fit in 32 bits Signed-off-by: Keith Packard --- diff --git a/src/kernel/ao_distance.c b/src/kernel/ao_distance.c index ba7d59fe..5654182a 100644 --- a/src/kernel/ao_distance.c +++ b/src/kernel/ao_distance.c @@ -24,6 +24,7 @@ ao_dist(int32_t a, int32_t b) int32_t d = a - b; if (d < 0) d = -d; + return (uint32_t) ((int64_t) d * 111198 / 10000000); } @@ -98,7 +99,7 @@ ao_lon_dist(int32_t lon_a, int32_t lon_b) uint32_t lon_dist; /* check if it's shorter to go the other way around */ - if (lon_a < lon_b - 1800000000) + if ((lon_a >> 1) < (lon_b >> 1) - (1800000000 >> 1)) lon_a += 3600000000; lon_dist = ao_dist(lon_a, lon_b); if (c) {