summaryrefslogtreecommitdiffstats
path: root/save-xml.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2012-11-18 07:55:41 -1000
committerGravatar Dirk Hohndel <dirk@hohndel.org>2012-11-19 12:03:44 -0800
commit2a78f3436ccf157977eccf9435c2680e2d7bc3d3 (patch)
treee3c2386c299e5a8d7db012fd6943b49cf63bbf45 /save-xml.c
parent8a45a3ffb9e55b29cb7bdd056ba60eb7968e8fcd (diff)
downloadsubsurface-2a78f3436ccf157977eccf9435c2680e2d7bc3d3.tar.gz
Fix the XML gps parsing and saving when using non-US locales
The GPS parsing and saving was using sscanf and sprintf respecively, and since it is using floating point values (boo!) that affects both of them. In a C/US locale, we use a period for decimal values, while most European locales use a comma. We really should probably just fix things to use integer values (degrees and nanodegrees?) but this is the simplest fix/workaround for the issue. Probably nobody ever really noticed until I tested the Swedish locale for grins, since we don't have a good way to actually set the GPS coordinates yet. I've got a few dives with GPS information that I entered manually. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'save-xml.c')
-rw-r--r--save-xml.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/save-xml.c b/save-xml.c
index 824763c44..a70aacc3e 100644
--- a/save-xml.c
+++ b/save-xml.c
@@ -193,8 +193,14 @@ static void show_location(FILE *f, struct dive *dive)
*/
if (latitude || longitude) {
int len = snprintf(buffer, sizeof(buffer)-4,
- " <location gps='%.12g %.12g'>",
- latitude, longitude);
+ " <location gps=");
+ char *buf = buffer + len;
+
+ len = strlen(g_ascii_formatd(buf, 80, "'%.12g ", latitude));
+ buf += len;
+ len = strlen(g_ascii_formatd(buf, 80, "%.12g'>", longitude));
+ buf += len;
+ len = buf - buffer;
if (!dive->location) {
memcpy(&buffer[len-1], "/>\n", 4);
fputs(buffer, f);