X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/c017be3c0b41865d049c8f09d09b7026fd848f13..9215988610c6aa36b971b8a2b981db90fff1002b:/src/degrees_converters.c?ds=sidebyside diff --git a/src/degrees_converters.c b/src/degrees_converters.c index fbf433fd..c34ed9a6 100644 --- a/src/degrees_converters.c +++ b/src/degrees_converters.c @@ -25,8 +25,8 @@ #ifdef HAVE_MATH_H #include #endif -#include #include +#include "degrees_converters.h" #define DEGREE_SYMBOL "\302\260" @@ -138,7 +138,7 @@ static gchar *convert_dec_to_dms(gdouble dec, gchar pos_c, gchar neg_c) val_s = (tmp - val_m) * 60; /* Format */ - result = g_strdup_printf ( "%c%d" DEGREE_SYMBOL "%d'%f\"", + result = g_strdup_printf ( "%c%d" DEGREE_SYMBOL "%d'%.4f\"", sign_c, val_d, val_m, val_s ); return result; } @@ -178,8 +178,13 @@ gdouble convert_dms_to_dec(const gchar *dms) gdouble value; ptr = strpbrk (endptr, "0123456789,."); if (ptr != NULL) { - value = g_strtod((const gchar *)ptr, (gchar **)&endptr); - nbFloat++; + const gchar *tmpptr = endptr; + value = g_strtod((const gchar *)ptr, (gchar **)&endptr); + // Detect when endptr hasn't changed (which may occur if no conversion took place) + // particularly if the last character is a ',' or there are multiple '.'s like '5.5.' + if ( endptr == tmpptr ) + break; + nbFloat++; switch(nbFloat) { case 1: d = value; @@ -190,6 +195,7 @@ gdouble convert_dms_to_dec(const gchar *dms) case 3: s = value; break; + default: break; } } } while (ptr != NULL && endptr != NULL);