From 3bcdd28a6a42d810523d30b30e9ccf880e2b0ca1 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 4 Apr 2021 16:12:15 +0200 Subject: Reorder libcontacts_address and fix coord parsing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libcontacts.h | 2 +- libcontacts_parse_contact.c | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/libcontacts.h b/libcontacts.h index 4a2d782..6eb4054 100644 --- a/libcontacts.h +++ b/libcontacts.h @@ -89,11 +89,11 @@ struct libcontacts_number { */ struct libcontacts_address { char *context; /* Work address (which job)? Home? Summer cabin? … */ - char *country; /* Which country? */ char *care_of; /* Care of address, if any */ char *address; /* Address, all lines in one */ char *postcode; /* Post code */ char *city; /* Which city is the post code tied to? */ + char *country; /* Which country? */ int have_coordinates; /* Are `.latitude` and `.longitude` defined? */ double latitude; /* Latitudal GPS coordinate */ double longitude; /* Longitudal GPS coordinate */ diff --git a/libcontacts_parse_contact.c b/libcontacts_parse_contact.c index 3cfd54e..8970afd 100644 --- a/libcontacts_parse_contact.c +++ b/libcontacts_parse_contact.c @@ -137,7 +137,7 @@ parse_coord(char *s, double *lat, double *lon) errno = 0; withsign = (s[0] == '-' || s[0] == '+'); - if (s[withsign] != '.' || isdigit(s[withsign])) + if (s[withsign] != '.' && !isdigit(s[withsign])) goto bad; *lat = strtod(s, &s); if (errno) @@ -150,9 +150,10 @@ parse_coord(char *s, double *lat, double *lon) if (s[0] != ' ') goto bad; + s = &s[1]; withsign = (s[0] == '-' || s[0] == '+'); - if (s[withsign] != '.' || isdigit(s[withsign])) + if (s[withsign] != '.' && !isdigit(s[withsign])) goto bad; *lon = strtod(s, &s); if (errno) @@ -347,9 +348,9 @@ libcontacts_parse_contact(char *data, struct libcontacts_contact *contact) if (!(contact->addresses[i]->city = strdup(getstr(p)))) goto fail; } else if (TEST(unindent(p), "COORD") && !contact->addresses[i]->have_coordinates) { - if (parse_coord(getstr(p), - &contact->addresses[i]->latitude, - &contact->addresses[i]->longitude)) { + if (!parse_coord(getstr(p), + &contact->addresses[i]->latitude, + &contact->addresses[i]->longitude)) { contact->addresses[i]->have_coordinates = 1; } else { if (addstr(&contact->addresses[i]->unrecognised_data, unindent(p))) -- cgit v1.2.3-70-g09d2