From 78dc4685a152943c73fcd9cadb8f6d8ecc6d1d79 Mon Sep 17 00:00:00 2001 From: oetiker Date: Sat, 4 Jul 2009 14:51:01 +0000 Subject: [PATCH] be more careful when converting to string to time_t ... test if time_t is long long git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@1863 a5681a0c-68f1-0310-ab6d-d61299d08faa --- src/rrd_restore.c | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/rrd_restore.c b/src/rrd_restore.c index 8f5cbcf..52c738b 100644 --- a/src/rrd_restore.c +++ b/src/rrd_restore.c @@ -241,6 +241,30 @@ static int get_xml_ulong( return -1; } /* get_xml_ulong */ +static int get_xml_llong( + xmlTextReaderPtr reader, + long long *value) +{ + + xmlChar *text; + long long temp; + if ((text = get_xml_text(reader)) != NULL){ + errno = 0; + temp = strtoll((char *)text,NULL, 0); + if (errno>0){ + rrd_set_error("ling %d: get_xml_llong from '%s' %s", + xmlTextReaderGetParserLineNumber(reader), + text,rrd_strerror(errno)); + xmlFree(text); + return -1; + } + xmlFree(text); + *value = temp; + return 0; + } + return -1; +} /* get_xml_llong */ + static int get_xml_double( xmlTextReaderPtr reader, double *value) @@ -986,9 +1010,16 @@ static int parse_tag_rrd( else if (xmlStrcasecmp(element, (const xmlChar *) "step") == 0) status = get_xml_ulong(reader, &rrd->stat_head->pdp_step); - else if (xmlStrcasecmp(element, (const xmlChar *) "lastupdate") == 0) - status = get_xml_long(reader, - &rrd->live_head->last_up); + else if (xmlStrcasecmp(element, (const xmlChar *) "lastupdate") == 0) { + if (sizeof(time_t) == sizeof(long)) { + status = get_xml_long(reader, + (long *)&rrd->live_head->last_up); + } + else if (sizeof(time_t) == sizeof(long long)) { + status = get_xml_llong(reader, + (long long *)&rrd->live_head->last_up); + } + } else if (xmlStrcasecmp(element, (const xmlChar *) "ds") == 0){ xmlFree(element); status = parse_tag_ds(reader, rrd); -- 2.11.0