aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2021-04-04 16:12:15 +0200
committerMattias Andrée <maandree@kth.se>2021-04-04 16:12:15 +0200
commit3bcdd28a6a42d810523d30b30e9ccf880e2b0ca1 (patch)
treef68e09d120e76df41c08b4e20481024e742b0c0d
parentm (diff)
downloadlibcontacts-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>
-rw-r--r--libcontacts.h2
-rw-r--r--libcontacts_parse_contact.c11
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)))