summaryrefslogtreecommitdiff
path: root/nmea_parse.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2005-03-24 08:51:51 +0000
committerEric S. Raymond <esr@thyrsus.com>2005-03-24 08:51:51 +0000
commitfe0831eaeef107dba90f7342b76cd02b477893f7 (patch)
tree607be1b119de978ead71f1890676335634cb6d7e /nmea_parse.c
parent4204673a7e8075b29c5370b04272efdb4d59bbbe (diff)
downloadgpsd-fe0831eaeef107dba90f7342b76cd02b477893f7.tar.gz
Attempt to fix Daniele Gangrezi's bug.
Diffstat (limited to 'nmea_parse.c')
-rw-r--r--nmea_parse.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/nmea_parse.c b/nmea_parse.c
index 0dd20461..bfd5b874 100644
--- a/nmea_parse.c
+++ b/nmea_parse.c
@@ -382,12 +382,18 @@ static int processGPGSV(int count, char *field[], struct gps_data_t *out)
else if (out->part == 1)
gpsd_zero_satellites(out);
- for (fldnum = 4; fldnum < count; out->satellites++) {
- out->PRN[out->satellites] = atoi(field[fldnum++]);
- out->elevation[out->satellites] = atoi(field[fldnum++]);
- out->azimuth[out->satellites] = atoi(field[fldnum++]);
- out->ss[out->satellites] = atoi(field[fldnum++]);
+ for (n = 0, fldnum = 4; fldnum < count;) {
+ out->PRN[n] = atoi(field[fldnum++]);
+ out->elevation[n] = atoi(field[fldnum++]);
+ out->azimuth[n] = atoi(field[fldnum++]);
+ out->ss[n] = atoi(field[fldnum++]);
+ if (out->PRN[n])
+ n++;
}
+ out->satellites = atoi(field[3]);
+ if (n != out->satellites)
+ gpsd_report(0, "GPGSV field 3 value of %d != actual count %d\n",
+ out->satellites, n);
/* not valid data until we've seen a complete set of parts */
if (out->part < out->await) {