*****************************************************************************
* rrd_resize.c Alters size of an RRA
*****************************************************************************
* Initial version by Alex van den Bogaerdt
*****************************************************************************/
*****************************************************************************
* rrd_resize.c Alters size of an RRA
*****************************************************************************
* Initial version by Alex van den Bogaerdt
*****************************************************************************/
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 */
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 */
break;
default:
rrd_set_error("Do not know how to handle RRD version %s",
rrdold.stat_head->version);
break;
default:
rrd_set_error("Do not know how to handle RRD version %s",
rrdold.stat_head->version);
buffer = DNAN;
l = rrdnew.stat_head->ds_cnt * modify;
while (l > 0) {
rrd_write(rrd_out_file, &buffer, sizeof(rrd_value_t) * 1);
l--;
}
buffer = DNAN;
l = rrdnew.stat_head->ds_cnt * modify;
while (l > 0) {
rrd_write(rrd_out_file, &buffer, sizeof(rrd_value_t) * 1);
l--;
}
} else {
/* Removing rows. Normally this would be just after the cursor
** however this may also mean that we wrap to the beginning of
} else {
/* Removing rows. Normally this would be just after the cursor
** however this may also mean that we wrap to the beginning of
- rrd_write(rrd_out_file, &buffer, sizeof(rrd_value_t) * 1);
+ if(rrd_out_file->pos+b_read > rrd_out_file->file_len) {
+ fprintf(stderr,"WARNING: ignoring last %zu bytes\nWARNING: if you see this message multiple times for a single file you're in trouble\n", b_read);
+ continue;
+ }
+ rrd_write(rrd_out_file, &buffer, b_read);