+ rrd_init(&rrdnew);
+ /* These need to be initialised before calling rrd_open() with
+ the RRD_CREATE flag */
+ if ((rrdnew.stat_head = calloc(1, sizeof(stat_head_t))) == NULL) {
+ rrd_set_error("allocating stat_head for new RRD");
+ rrd_free(&rrdold);
+ rrd_close(rrd_file);
+ return (-1);
+ }
+
+ if ((rrdnew.rra_def = malloc(sizeof(rra_def_t) * rrdold.stat_head->rra_cnt)) == NULL) {
+ rrd_set_error("allocating rra_def for new RRD");
+ rrd_free(&rrdnew);
+ rrd_free(&rrdold);
+ rrd_close(rrd_file);
+ rrd_close(rrd_out_file);
+ return (-1);
+ }
+
+ memcpy(rrdnew.stat_head,rrdold.stat_head,sizeof(stat_head_t));
+ memcpy(rrdnew.rra_def,rrdold.rra_def,sizeof(rra_def_t) * rrdold.stat_head->rra_cnt);
+
+ /* Set this so that the file will be created with the correct size */
+ rrdnew.rra_def[target_rra].row_cnt += modify;
+
+ rrd_out_file = rrd_open(outfilename, &rrdnew, RRD_READWRITE | RRD_CREAT);