]> git.ipfire.org Git - thirdparty/rrdtool-1.x.git/commitdiff
Fix CDP init problems introduced with original add DS code
authorPeter Stamfest <peter@stamfest.at>
Thu, 27 Feb 2014 21:14:03 +0000 (22:14 +0100)
committerPeter Stamfest <peter@stamfest.at>
Thu, 27 Feb 2014 21:14:03 +0000 (22:14 +0100)
src/rrd_modify.c

index cab6cd818d4fee7e789f5c70c7b40ea88fea4485..d0236c215f737a741386507fdd39fe80a66f9c40 100644 (file)
@@ -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