mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-17 22:46:16 +00:00
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>
This commit is contained in:
parent
8a45a3ffb9
commit
2a78f3436c
2 changed files with 11 additions and 9 deletions
10
parse-xml.c
10
parse-xml.c
|
@ -1045,15 +1045,11 @@ static int uddf_dive_match(struct dive **divep, const char *name, int len, char
|
||||||
|
|
||||||
static void gps_location(char *buffer, void *_dive)
|
static void gps_location(char *buffer, void *_dive)
|
||||||
{
|
{
|
||||||
int i;
|
char *end;
|
||||||
struct dive *dive = _dive;
|
struct dive *dive = _dive;
|
||||||
double latitude, longitude;
|
|
||||||
|
|
||||||
i = sscanf(buffer, "%lf %lf", &latitude, &longitude);
|
dive->latitude = g_ascii_strtod(buffer, &end);
|
||||||
if (i == 2) {
|
dive->longitude = g_ascii_strtod(end, &end);
|
||||||
dive->latitude = latitude;
|
|
||||||
dive->longitude = longitude;
|
|
||||||
}
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
10
save-xml.c
10
save-xml.c
|
@ -193,8 +193,14 @@ static void show_location(FILE *f, struct dive *dive)
|
||||||
*/
|
*/
|
||||||
if (latitude || longitude) {
|
if (latitude || longitude) {
|
||||||
int len = snprintf(buffer, sizeof(buffer)-4,
|
int len = snprintf(buffer, sizeof(buffer)-4,
|
||||||
" <location gps='%.12g %.12g'>",
|
" <location gps=");
|
||||||
latitude, longitude);
|
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) {
|
if (!dive->location) {
|
||||||
memcpy(&buffer[len-1], "/>\n", 4);
|
memcpy(&buffer[len-1], "/>\n", 4);
|
||||||
fputs(buffer, f);
|
fputs(buffer, f);
|
||||||
|
|
Loading…
Add table
Reference in a new issue