From 5e42aa1957ebd5e46eb22310d35542072d5152b9 Mon Sep 17 00:00:00 2001 From: oetiker Date: Tue, 22 Nov 2011 15:40:22 +0000 Subject: [PATCH] allow to restore xml files with zero row rras ... this is a degenerated case that does not occure in the wild, as rrdtool prevents the creation of such rrd files. But rrdtool restore 1.3 did allows to create them via restore. Now this is possible again. Fix for #310. git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@2212 a5681a0c-68f1-0310-ab6d-d61299d08faa --- program/src/rrd_restore.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/program/src/rrd_restore.c b/program/src/rrd_restore.c index fde83ae6..39148e89 100644 --- a/program/src/rrd_restore.c +++ b/program/src/rrd_restore.c @@ -788,7 +788,7 @@ static int parse_tag_rra( /* All space successfully allocated, increment number of RRAs. */ rrd->stat_head->rra_cnt++; - + status = 0; while ((element = get_xml_element(reader)) != NULL){ if (xmlStrcasecmp(element, (const xmlChar *) "cf") == 0) @@ -827,7 +827,7 @@ static int parse_tag_rra( return status; } else if (xmlStrcasecmp(element,(const xmlChar *) "/rra") == 0){ - xmlFree(element); + xmlFree(element); return status; } /* }}} */ else { @@ -1180,15 +1180,16 @@ static int write_file( unsigned long num_rows = rrd->rra_def[i].row_cnt; unsigned long cur_row = rrd->rra_ptr[i].cur_row; unsigned long ds_cnt = rrd->stat_head->ds_cnt; + if (num_rows > 0){ + fwrite(rrd->rrd_value + + (rra_offset + num_rows - 1 - cur_row) * ds_cnt, + sizeof(rrd_value_t), (cur_row + 1) * ds_cnt, fh); - fwrite(rrd->rrd_value + - (rra_offset + num_rows - 1 - cur_row) * ds_cnt, - sizeof(rrd_value_t), (cur_row + 1) * ds_cnt, fh); - - fwrite(rrd->rrd_value + rra_offset * ds_cnt, - sizeof(rrd_value_t), (num_rows - 1 - cur_row) * ds_cnt, fh); + fwrite(rrd->rrd_value + rra_offset * ds_cnt, + sizeof(rrd_value_t), (num_rows - 1 - cur_row) * ds_cnt, fh); - rra_offset += num_rows; + rra_offset += num_rows; + } } /* lets see if we had an error */ -- 2.30.2