X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_restore.c;h=91545ca2f2e518bfd5f98301239f23221cdf56cf;hb=1f9b7ab8ed47877007a63fba17b354ed194712d8;hp=4cbc37adc45ebc08de59ab2fb80822055d2c7cfd;hpb=bed830e383db9d9fc563897442cc441981396504;p=rrdtool.git diff --git a/src/rrd_restore.c b/src/rrd_restore.c index 4cbc37a..91545ca 100644 --- a/src/rrd_restore.c +++ b/src/rrd_restore.c @@ -1,18 +1,23 @@ /***************************************************************************** - * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2009 + * RRDtool 1.4.2 Copyright by Tobi Oetiker, 1997-2009 ***************************************************************************** * rrd_restore.c Contains logic to parse XML input and create an RRD file - * initial libxml2 version of rrd_restore (c) by Florian octo Forster + * This file: + * Copyright (C) 2008 Florian octo Forster (original libxml2 code) + * Copyright (C) 2008,2009 Tobias Oetiker ***************************************************************************** * $Id$ *************************************************************************** */ +#include "rrd_tool.h" +#include "rrd_rpncalc.h" + #include #include #include #include #include - +#include #ifndef WIN32 # include /* for off_t */ @@ -28,8 +33,6 @@ # define close _close #endif -#include "rrd_tool.h" -#include "rrd_rpncalc.h" #define ARRAY_LENGTH(a) (sizeof (a) / sizeof ((a)[0])) @@ -273,34 +276,35 @@ static int get_xml_double( double *value) { - char *text; + xmlChar *text; double temp; - if ((text = (char *)get_xml_text(reader))!= NULL){ - if (strcasestr(text,"nan")){ + if ((text = get_xml_text(reader))!= NULL){ + if (xmlStrcasestr(text,(xmlChar *)"nan")){ *value = DNAN; xmlFree(text); return 0; } - else if (strcasestr(text,"-inf")){ + else if (xmlStrcasestr(text,(xmlChar *)"-inf")){ *value = -DINF; xmlFree(text); return 0; } - else if (strcasestr(text,"+inf") - || strcasestr(text,"inf")){ + else if (xmlStrcasestr(text,(xmlChar *)"+inf") + || xmlStrcasestr(text,(xmlChar *)"inf")){ *value = DINF; xmlFree(text); return 0; } errno = 0; temp = strtod((char *)text,NULL); - xmlFree(text); if (errno>0){ rrd_set_error("ling %d: get_xml_double from '%s' %s", xmlTextReaderGetParserLineNumber(reader), text,rrd_strerror(errno)); + xmlFree(text); return -1; } + xmlFree(text); *value = temp; return 0; } @@ -1211,7 +1215,7 @@ int rrd_restore( char **argv) { rrd_t *rrd; - + char *old_locale; /* init rrd clean */ optind = 0; opterr = 0; /* initialize getopt */ @@ -1253,7 +1257,12 @@ int rrd_restore( return (-1); } + old_locale = setlocale(LC_NUMERIC, "C"); + rrd = parse_file(argv[optind]); + + setlocale(LC_NUMERIC, old_locale); + if (rrd == NULL) return (-1);