static int test_nmea_date_parse(const char * s) { struct nmea_date_t t; const char * e = s + strlen(s); return nmea_date_parse(s, e, &t) == e && !nmea_date_check(&t); }
int parse(nmea_parser_s *parser, char *value, int val_index) { nmea_gprmc_s *data = (nmea_gprmc_s *) parser->data; switch (val_index) { case NMEA_GPRMC_TIME: /* Parse time */ if (-1 == nmea_time_parse(value, &data->time)) { return -1; } break; case NMEA_GPRMC_LATITUDE: /* Parse latitude */ if (-1 == nmea_position_parse(value, &data->latitude)) { return -1; } break; case NMEA_GPRMC_LATITUDE_CARDINAL: /* Parse cardinal direction */ data->latitude.cardinal = nmea_cardinal_direction_parse(value); if (NMEA_CARDINAL_DIR_UNKNOWN == data->latitude.cardinal) { return -1; } break; case NMEA_GPRMC_LONGITUDE: /* Parse longitude */ if (-1 == nmea_position_parse(value, &data->longitude)) { return -1; } break; case NMEA_GPRMC_LONGITUDE_CARDINAL: /* Parse cardinal direction */ data->longitude.cardinal = nmea_cardinal_direction_parse(value); if (NMEA_CARDINAL_DIR_UNKNOWN == data->longitude.cardinal) { return -1; } break; case NMEA_GPRMC_DATE: /* Parse date */ if (-1 == nmea_date_parse(value, &data->time)) { return -1; } break; default: break; } return 0; }