summaryrefslogtreecommitdiffstats
path: root/parse-xml.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2014-01-08 14:51:22 +0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-01-09 09:30:25 +0800
commit1c72b8b0545e6a13ea3db917a1434152c73a3c3b (patch)
tree64fc4f0195165e1352e980a805fcdf7081e4ba17 /parse-xml.c
parentb9d7e440fd37a4da8455d80a71911a4fbcdbfa11 (diff)
downloadsubsurface-1c72b8b0545e6a13ea3db917a1434152c73a3c3b.tar.gz
const'ify our strtod() helper functions
The C library doesn't use const char pointers for legacy reasons (and because you *can* modify the string the end pointer points to), but let's do it in our internal implementation just because it's a nice guarantee to have. We actually used to have a non-const end pointer and replace a decimal comma with a decimal dot, but that was because we didn't have the fancy "allow commas" flags. So by using our own strtod_flags() function, we can now keep all the strings we parse read-only rather than modify them as we parse them. 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.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/parse-xml.c b/parse-xml.c
index 59e04efb1..8fc504a3f 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -263,7 +263,7 @@ enum number_type {
FLOAT
};
-static enum number_type parse_float(char *buffer, double *res, char **endp)
+static enum number_type parse_float(const char *buffer, double *res, const char **endp)
{
double val;
static bool first_time = TRUE;
@@ -281,9 +281,8 @@ static enum number_type parse_float(char *buffer, double *res, char **endp)
fprintf(stderr, "Floating point value with decimal comma (%s)?\n", buffer);
first_time = FALSE;
}
- /* Try again */
- **endp = '.';
- val = ascii_strtod(buffer, endp);
+ /* Try again in permissive mode*/
+ val = strtod_flags(buffer, endp, 0);
}
}
@@ -297,7 +296,7 @@ union int_or_float {
static enum number_type integer_or_float(char *buffer, union int_or_float *res)
{
- char *end;
+ const char *end;
return parse_float(buffer, &res->fp, &end);
}
@@ -459,7 +458,7 @@ static void percent(char *buffer, void *_fraction)
{
fraction_t *fraction = _fraction;
double val;
- char *end;
+ const char *end;
switch (parse_float(buffer, &val, &end)) {
case FLOAT: