summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Tatarinov <kukabu@gmail.com>2013-02-18 11:42:56 +0400
committerEric S. Raymond <esr@thyrsus.com>2013-02-18 02:45:09 -0500
commitb5c2841005816d1521064daa4ea03c1c8ce7c298 (patch)
tree243cea206bb86369afd61e0315899e7abb8b8174
parent5ec399ba397aced9d324c06a8156314dc05b2a6e (diff)
downloadgpsd-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.c6
-rw-r--r--bits.h4
-rw-r--r--driver_ais.c14
-rw-r--r--driver_rtcm3.c4
-rw-r--r--test_bits.c2
5 files changed, 15 insertions, 15 deletions
diff --git a/bits.c b/bits.c
index 31b332a7..f18797c7 100644
--- a/bits.c
+++ b/bits.c
@@ -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))) {
diff --git a/bits.h b/bits.h
index ac493e7f..e8a1d664 100644
--- a/bits.h
+++ b/bits.h
@@ -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;