From 6c7e2f9ffae975204f11524382bfa8553807ce20 Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Sun, 10 Mar 2013 15:36:00 +0200 Subject: Info dialog: print coordinates using an ASCII 'dtoa' type of method dac29e7bc4 introduced changes to how the GPS coordinate string is parsed; we now prefer to parse decimal numbers using the '.' character. This patch makes modifications to info.c:print_gps_coordinates(), where we are still using a locale dependent method for converting a double to string - snprintf(). Instead, we attempt to use GLib's g_ascii_formatd(), and store the resulted strings into two buffers named 'dbuf_lat' and 'dbuf_lon'. We then pass the buffers to the final snprintf() formatting with '%s'. Reported-and-tested-by: Sergey Starosek Signed-off-by: Lubomir I. Ivanov Signed-off-by: Dirk Hohndel --- info.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/info.c b/info.c index 813608115..455fbea1a 100644 --- a/info.c +++ b/info.c @@ -644,7 +644,7 @@ static void print_gps_coordinates(char *buffer, int len, int lat, int lon) { unsigned int latdeg, londeg; double latmin, lonmin; - char *lath, *lonh; + char *lath, *lonh, dbuf_lat[32], dbuf_lon[32]; if (!lat && !lon) { *buffer = 0; @@ -658,9 +658,16 @@ static void print_gps_coordinates(char *buffer, int len, int lat, int lon) londeg = lon / 1000000; latmin = (lat % 1000000) * 60.0 / 1000000.0; lonmin = (lon % 1000000) * 60.0 / 1000000.0; - snprintf(buffer, len, "%s%u%s %8.5f\' , %s%u%s %8.5f\'", - lath, latdeg, UTF8_DEGREE, latmin, - lonh, londeg, UTF8_DEGREE, lonmin); + *dbuf_lat = *dbuf_lon = 0; + g_ascii_formatd(dbuf_lat, sizeof(dbuf_lat), "%8.5f", latmin); + g_ascii_formatd(dbuf_lon, sizeof(dbuf_lon), "%8.5f", lonmin); + if (!*dbuf_lat || !*dbuf_lon) { + *buffer = 0; + return; + } + snprintf(buffer, len, "%s%u%s %s\' , %s%u%s %s\'", + lath, latdeg, UTF8_DEGREE, dbuf_lat, + lonh, londeg, UTF8_DEGREE, dbuf_lon); } static void update_gps_entry(int lat, int lon) -- cgit v1.2.3-70-g09d2