diff options
author | Mattias Andrée <maandree@kth.se> | 2021-04-04 16:12:15 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@kth.se> | 2021-04-04 16:12:15 +0200 |
commit | 3bcdd28a6a42d810523d30b30e9ccf880e2b0ca1 (patch) | |
tree | f68e09d120e76df41c08b4e20481024e742b0c0d | |
parent | m (diff) | |
download | libcontacts-3bcdd28a6a42d810523d30b30e9ccf880e2b0ca1.tar.gz libcontacts-3bcdd28a6a42d810523d30b30e9ccf880e2b0ca1.tar.bz2 libcontacts-3bcdd28a6a42d810523d30b30e9ccf880e2b0ca1.tar.xz |
Reorder libcontacts_address and fix coord parsing
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
-rw-r--r-- | libcontacts.h | 2 | ||||
-rw-r--r-- | 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))) |