aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Lubomir I. Ivanov <neolit123@gmail.com>2013-03-10 15:36:00 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-03-10 09:21:55 -0700
commit6c7e2f9ffae975204f11524382bfa8553807ce20 (patch)
tree0a8e6fccfb1b4ae65f984b4fefd918523beebd3a
parent6dd31a6cc6c3305bc432a4cd636ee86fea55ad67 (diff)
downloadsubsurface-6c7e2f9ffae975204f11524382bfa8553807ce20.tar.gz
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 <sergey.starosek@gmail.com> Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--info.c15
1 files 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)