#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
+#include <errno.h>
#include <string.h>
#include <termios.h>
}
}
- if (strlen(nmea_params[3].str) != 9 || strlen(nmea_params[5].str) != 10) {
- ERROR("lat/lng have invalid string length\n");
+ if (strlen(nmea_params[3].str) < 9 || strlen(nmea_params[5].str) < 10) {
+ ERROR("lat/lng have invalid string length %d<9, %d<10\n",
+ strlen(nmea_params[3].str), strlen(nmea_params[5].str));
} else {
int latd, latm, lats;
int lngd, lngm, lngs;
nmea_tokenize(char *msg)
{
int cnt = 0;
- char *tok = strtok(msg, ",");
+ char *tok = strsep(&msg, ",");
while (tok && cnt < MAX_NMEA_PARAM) {
nmea_params[cnt].str = tok;
nmea_params[cnt].num = atoi(tok);
cnt++;
- tok = strtok(NULL, ",");
+ tok = strsep(&msg, ",");
}
return cnt;
return;
if (nmea_verify_checksum(a)) {
- ERROR("nmea message has invlid checksum\n");
+ ERROR("nmea message has invalid checksum\n");
return;
}
tty = open(dev, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (tty < 0) {
- ERROR("%s: device open failed\n", dev);
+ ERROR("%s: device open failed: %s\n", dev, strerror(errno));
return -1;
}