X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Frrd_restore.c;h=ef524b2ed9fc663b296bc49e6346f4ff6da79045;hb=529889c4a5284939c39da464fc789f273fb05ddc;hp=962b64c47f4729c9e7cb7e2810759c2ca7431b75;hpb=d548109b060e16a3ac8975d92ffcafaa07ed826f;p=rrdtool.git diff --git a/src/rrd_restore.c b/src/rrd_restore.c index 962b64c..ef524b2 100644 --- a/src/rrd_restore.c +++ b/src/rrd_restore.c @@ -1,5 +1,5 @@ /***************************************************************************** - * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009 + * RRDtool 1.3.8 Copyright by Tobi Oetiker, 1997-2009 * This file: Copyright 2008 Florian octo Forster * Distributed under the GPL ***************************************************************************** @@ -151,6 +151,36 @@ static int get_ulong_from_node( return (0); } /* int get_ulong_from_node */ +static int get_long_long_from_node( + xmlDoc * doc, + xmlNode * node, + long long *value) +{ + long long temp; + char *str_ptr; + char *end_ptr; + + str_ptr = (char *) xmlNodeListGetString(doc, node->xmlChildrenNode, 1); + if (str_ptr == NULL) { + rrd_set_error("get_ulong_from_node: xmlNodeListGetString failed."); + return (-1); + } + + end_ptr = NULL; + temp = strtoll(str_ptr, &end_ptr, 0); + xmlFree(str_ptr); + + if (str_ptr == end_ptr) { + rrd_set_error("get_long_long_from_node: Cannot parse buffer as unsigned long long: %s", + str_ptr); + return (-1); + } + + *value = temp; + + return (0); +} /* int get_ulong_from_node */ + static int get_double_from_node( xmlDoc * doc, xmlNode * node, @@ -918,8 +948,12 @@ static int parse_tag_rrd( status = get_ulong_from_node(doc, child, &rrd->stat_head->pdp_step); else if (xmlStrcmp(child->name, (const xmlChar *) "lastupdate") == 0) - status = get_long_from_node(doc, child, - &rrd->live_head->last_up); + if (sizeof(time_t) == sizeof(long)) { + status = get_long_from_node(doc, child, (long *)&rrd->live_head->last_up); + } + else if (sizeof(time_t) == sizeof(long long)) { + status = get_long_long_from_node(doc, child, (long long *)&rrd->live_head->last_up); + } else if (xmlStrcmp(child->name, (const xmlChar *) "ds") == 0) status = parse_tag_ds(doc, child, rrd); else if (xmlStrcmp(child->name, (const xmlChar *) "rra") == 0)