diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-03-07 11:43:51 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-03-08 09:51:49 -0800 |
commit | f1f667c96f6c646bb48dcd4c306d13522ce0c34e (patch) | |
tree | 0e01afb45433531e8a501113978d6d3b2dfec350 /parse-xml.c | |
parent | 29be221bd877e345db8f191078796e111feb0b71 (diff) | |
download | subsurface-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.c | 15 |
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; |