diff options
author | Michael Tatarinov <kukabu@gmail.com> | 2013-02-18 11:42:56 +0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2013-02-18 02:45:09 -0500 |
commit | b5c2841005816d1521064daa4ea03c1c8ce7c298 (patch) | |
tree | 243cea206bb86369afd61e0315899e7abb8b8174 | |
parent | 5ec399ba397aced9d324c06a8156314dc05b2a6e (diff) | |
download | gpsd-b5c2841005816d1521064daa4ea03c1c8ce7c298.tar.gz |
The signed/unsigned char fix.
All regression tests pass on Raspbian “wheezy”.
Signed-off-by: Eric S. Raymond <esr@thyrsus.com>
-rw-r--r-- | bits.c | 6 | ||||
-rw-r--r-- | bits.h | 4 | ||||
-rw-r--r-- | driver_ais.c | 14 | ||||
-rw-r--r-- | driver_rtcm3.c | 4 | ||||
-rw-r--r-- | test_bits.c | 2 |
5 files changed, 15 insertions, 15 deletions
@@ -17,7 +17,7 @@ #include "bits.h" -uint64_t ubits(char buf[], unsigned int start, unsigned int width, bool le) +uint64_t ubits(unsigned char buf[], unsigned int start, unsigned int width, bool le) /* extract a (zero-origin) bitfield from the buffer as an unsigned big-endian uint64_t */ { uint64_t fld = 0; @@ -58,10 +58,10 @@ uint64_t ubits(char buf[], unsigned int start, unsigned int width, bool le) return fld; } -int64_t sbits(char buf[], unsigned int start, unsigned int width, bool le) +int64_t sbits(signed char buf[], unsigned int start, unsigned int width, bool le) /* extract a bitfield from the buffer as a signed big-endian long */ { - uint64_t fld = ubits(buf, start, width, le); + uint64_t fld = ubits((unsigned char *)buf, start, width, le); /*@ +relaxtypes */ if (fld & (1LL << (width - 1))) { @@ -50,7 +50,7 @@ extern double getbed64(const char *, int); extern void putbef32(char *, int, float); /* bitfield extraction */ -extern uint64_t ubits(char buf[], unsigned int, unsigned int, bool); -extern int64_t sbits(char buf[], unsigned int, unsigned int, bool); +extern uint64_t ubits(unsigned char buf[], unsigned int, unsigned int, bool); +extern int64_t sbits(signed char buf[], unsigned int, unsigned int, bool); #endif /* _GPSD_BITS_H_ */ diff --git a/driver_ais.c b/driver_ais.c index 2c3e66be..f83a7823 100644 --- a/driver_ais.c +++ b/driver_ais.c @@ -26,7 +26,7 @@ * Parse the data from the device */ -static void from_sixbit(char *bitvec, uint start, int count, char *to) +static void from_sixbit(unsigned char *bitvec, uint start, int count, char *to) { /*@ +type @*/ #ifdef S_SPLINT_S @@ -328,7 +328,7 @@ bool ais_binary_decode(struct ais_t *ais, break; case 30: /* IMO289 - Text description - addressed */ ais->type6.dac1fid30.linkage = UBITS(88, 10); - from_sixbit((char *)bits, + from_sixbit((unsigned char *)bits, 98, bitlen-98, ais->type6.dac1fid30.text); imo = true; @@ -536,7 +536,7 @@ bool ais_binary_decode(struct ais_t *ais, break; case 29: /* IMO289 - Text Description - broadcast */ ais->type8.dac1fid29.linkage = UBITS(56, 10); - from_sixbit((char *)bits, + from_sixbit((unsigned char *)bits, 66, bitlen-66, ais->type8.dac1fid29.text); imo = true; @@ -629,7 +629,7 @@ bool ais_binary_decode(struct ais_t *ais, ais->type12.dest_mmsi = UBITS(40, 30); ais->type12.retransmit = (bool)UBITS(70, 1); //ais->type12.spare = UBITS(71, 1); - from_sixbit((char *)bits, + from_sixbit((unsigned char *)bits, 72, bitlen-72, ais->type12.text); break; @@ -640,7 +640,7 @@ bool ais_binary_decode(struct ais_t *ais, return false; } //ais->type14.spare = UBITS(38, 2); - from_sixbit((char *)bits, + from_sixbit((unsigned char *)bits, 40, bitlen-40, ais->type14.text); break; @@ -783,10 +783,10 @@ bool ais_binary_decode(struct ais_t *ais, return false; } ais->type21.aid_type = UBITS(38, 5); - from_sixbit((char *)bits, + from_sixbit((unsigned char *)bits, 43, 21, ais->type21.name); if (strlen(ais->type21.name) == 20 && bitlen > 272) - from_sixbit((char *)bits, + from_sixbit((unsigned char *)bits, 272, (bitlen - 272)/6, ais->type21.name+20); ais->type21.accuracy = UBITS(163, 1); diff --git a/driver_rtcm3.c b/driver_rtcm3.c index 93e955d8..90fbdae5 100644 --- a/driver_rtcm3.c +++ b/driver_rtcm3.c @@ -74,8 +74,8 @@ void rtcm3_unpack( /*@out@*/ struct rtcm3_t *rtcm, char *buf) signed long temp; /*@ -evalorder -sefparams -mayaliasunique @*/ -#define ugrab(width) (bitcount += width, ubits(buf, bitcount-width, width, false)) -#define sgrab(width) (bitcount += width, sbits(buf, bitcount-width, width, false)) +#define ugrab(width) (bitcount += width, ubits((unsigned char *)buf, bitcount-width, width, false)) +#define sgrab(width) (bitcount += width, sbits((signed char *)buf, bitcount-width, width, false)) #define GPS_PSEUDORANGE(fld, len) \ {temp = (unsigned long)ugrab(len); \ if (temp == GPS_INVALID_PSEUDORANGE) \ diff --git a/test_bits.c b/test_bits.c index b37a4d6c..6d7d4119 100644 --- a/test_bits.c +++ b/test_bits.c @@ -207,7 +207,7 @@ int main(int argc, char *argv[]) up < unsigned_tests + sizeof(unsigned_tests) / sizeof(unsigned_tests[0]); up++) { - uint64_t res = ubits((char *)buf, up->start, up->width, up->le); + uint64_t res = ubits((unsigned char *)buf, up->start, up->width, up->le); bool success = (res == up->expected); if (!success) failures = true; |