summaryrefslogtreecommitdiffstats
path: root/parse-xml.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2013-03-07 11:43:51 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-03-08 09:51:49 -0800
commitf1f667c96f6c646bb48dcd4c306d13522ce0c34e (patch)
tree0e01afb45433531e8a501113978d6d3b2dfec350 /parse-xml.c
parent29be221bd877e345db8f191078796e111feb0b71 (diff)
downloadsubsurface-f1f667c96f6c646bb48dcd4c306d13522ce0c34e.tar.gz
Warn about commas in floating point values
Localization could be causing floating point numbers to have a comma instead of a decimal point (in a file format that is really stupid). If we detect this we replace the comma with a decimal point instead, and try to re-parse the number, and see if we get further. The downside of that is that we're changing the buffer we get passed in. Nobody cares, but still, it's kind of ugly. It's simple, though. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'parse-xml.c')
-rw-r--r--parse-xml.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/parse-xml.c b/parse-xml.c
index a5b2f5cee..923df367c 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -207,11 +207,26 @@ enum number_type {
static enum number_type parse_float(char *buffer, double *res, char **endp)
{
double val;
+ static gboolean first_time = TRUE;
errno = 0;
val = g_ascii_strtod(buffer, endp);
if (errno || *endp == buffer)
return NEITHER;
+ if (**endp == ',') {
+ if (val == rint(val)) {
+ /* we really want to send an error if this is a Subsurface native file
+ * as this is likely indication of a bug - but right now we don't have
+ * that information available */
+ if (first_time) {
+ fprintf(stderr, "Floating point value with decimal comma (%s)?\n", buffer);
+ first_time = FALSE;
+ }
+ /* Try again */
+ **endp = '.';
+ val = g_ascii_strtod(buffer, endp);
+ }
+ }
*res = val;
return FLOAT;