From af847faeaa1bad791a1978fc0362c43d5811b6ef Mon Sep 17 00:00:00 2001 From: Peter Stamfest Date: Thu, 27 Feb 2014 22:14:03 +0100 Subject: [PATCH] Fix CDP init problems introduced with original add DS code --- src/rrd_modify.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/rrd_modify.c b/src/rrd_modify.c index cab6cd81..d0236c21 100644 --- a/src/rrd_modify.c +++ b/src/rrd_modify.c @@ -285,6 +285,19 @@ static int rrd_modify_r(const char *infilename, int start_index_in = in.stat_head->ds_cnt * j; int start_index_out = out.stat_head->ds_cnt * out.stat_head->rra_cnt; + out.rra_def = copy_over_realloc(out.rra_def, out.stat_head->rra_cnt, + in.rra_def, j, + sizeof(rra_def_t)); + if (out.rra_def == NULL) goto done; + + // adapt row count: + out.rra_def[out.stat_head->rra_cnt].row_cnt = final_row_count; + + out.rra_ptr = copy_over_realloc(out.rra_ptr, out.stat_head->rra_cnt, + &rra_0_ptr, 0, + sizeof(rra_ptr_t)); + if (out.rra_ptr == NULL) goto done; + int ii; for (i = ii = 0 ; i < ops_cnt ; i++) { switch (ops[i]) { @@ -296,8 +309,13 @@ static int rrd_modify_r(const char *infilename, break; } case 'a': { - memcpy(out.cdp_prep + start_index_out + ii, + cdp_prep_t *cdp_prep = out.cdp_prep + start_index_out + ii; + memcpy(cdp_prep, &empty_cdp_prep, sizeof(cdp_prep_t)); + + init_cdp(&out, + out.rra_def + out.stat_head->rra_cnt, + cdp_prep); ii++; break; } @@ -309,19 +327,6 @@ static int rrd_modify_r(const char *infilename, } } - out.rra_def = copy_over_realloc(out.rra_def, out.stat_head->rra_cnt, - in.rra_def, j, - sizeof(rra_def_t)); - if (out.rra_def == NULL) goto done; - - // adapt row count: - out.rra_def[out.stat_head->rra_cnt].row_cnt = final_row_count; - - out.rra_ptr = copy_over_realloc(out.rra_ptr, out.stat_head->rra_cnt, - &rra_0_ptr, 0, - sizeof(rra_ptr_t)); - if (out.rra_ptr == NULL) goto done; - total_out_rra_rows += out.rra_def[out.stat_head->rra_cnt].row_cnt; out.stat_head->rra_cnt++; @@ -343,7 +348,6 @@ static int rrd_modify_r(const char *infilename, char *all_data = NULL; - /* prepare space to read data in */ all_data = realloc(all_data, total_in_rra_rows * in.stat_head->ds_cnt -- 2.47.3