From f1f667c96f6c646bb48dcd4c306d13522ce0c34e Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Thu, 7 Mar 2013 11:43:51 -0800 Subject: [PATCH] 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 Signed-off-by: Dirk Hohndel --- parse-xml.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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;