From 5e5e3460acf9d29b03aff71228aff01e31a3bf45 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Wed, 5 Dec 2012 09:59:52 -0800 Subject: Turn latitude and longitude into integer micro-degree values This actually makes us internally use 'micro-degrees' for latitude and longitude, and we never turn them into floating point either at parse time or save time. That said, the Uemis downloader internally does still use atof() when converting things, which is likely a bug (locale issues and all that), but I'll ask Dirk to check it out. Signed-off-by: Linus Torvalds Signed-off-by: Dirk Hohndel --- uemis.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'uemis.c') diff --git a/uemis.c b/uemis.c index af344a5f1..4306a1b55 100644 --- a/uemis.c +++ b/uemis.c @@ -15,6 +15,7 @@ #include #define __USE_XOPEN #include +#include #include "dive.h" #include "uemis.h" @@ -107,8 +108,8 @@ struct uemis_helper { int lbs; int divespot; char **location; - double *latitude; - double *longitude; + degrees_t *latitude; + degrees_t *longitude; struct uemis_helper *next; }; static struct uemis_helper *uemis_helper = NULL; @@ -153,7 +154,7 @@ int uemis_get_weight_unit(int diveid) return 0; } -void uemis_mark_divelocation(int diveid, int divespot, char **location, double *longitude, double *latitude) +void uemis_mark_divelocation(int diveid, int divespot, char **location, degrees_t *longitude, degrees_t *latitude) { struct uemis_helper *hp = uemis_get_helper(diveid); hp->divespot = divespot; @@ -168,8 +169,8 @@ void uemis_set_divelocation(int divespot, char *text, double longitude, double l while (hp) { if (hp->divespot == divespot && hp->location) { *hp->location = text; - *hp->longitude = longitude; - *hp->latitude = latitude; + hp->longitude->udeg = round(longitude * 1000000); + hp->latitude->udeg = round(latitude * 1000000); } hp = hp->next; } -- cgit v1.2.3-70-g09d2