diff options
author | Lubomir I. Ivanov <neolit123@gmail.com> | 2013-03-10 15:36:00 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-03-10 09:21:55 -0700 |
commit | 6c7e2f9ffae975204f11524382bfa8553807ce20 (patch) | |
tree | 0a8e6fccfb1b4ae65f984b4fefd918523beebd3a | |
parent | 6dd31a6cc6c3305bc432a4cd636ee86fea55ad67 (diff) | |
download | subsurface-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.c | 15 |
1 files changed, 11 insertions, 4 deletions
@@ -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) |