X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_fetch.c;h=152018fa3d10a0f2fea244b5b57d9996b772e7d8;hb=7abb27e73d71c1c699ba088ac02977623975482a;hp=83b0cf6fcc584334e0bfa0eb20b2e74615113fa3;hpb=caa9411848390bf066b02588c4525731bee190c5;p=rrdtool.git diff --git a/src/rrd_fetch.c b/src/rrd_fetch.c index 83b0cf6..152018f 100644 --- a/src/rrd_fetch.c +++ b/src/rrd_fetch.c @@ -56,7 +56,7 @@ #include "rrd_client.h" #include "rrd_is_thread_safe.h" -/*#define DEBUG*/ +/* #define DEBUG */ int rrd_fetch( int argc, @@ -258,7 +258,7 @@ int rrd_fetch_fn( } for (i = 0; (unsigned long) i < rrd.stat_head->ds_cnt; i++) { - if ((((*ds_namv)[i]) = malloc(sizeof(char) * DS_NAM_SIZE)) == NULL) { + if ((((*ds_namv)[i]) = (char*)malloc(sizeof(char) * DS_NAM_SIZE)) == NULL) { rrd_set_error("malloc fetch ds_namv entry"); goto err_free_ds_namv; } @@ -358,7 +358,7 @@ int rrd_fetch_fn( ** database is the one with time stamp (t+s) which means t to t+s. */ *ds_cnt = rrd.stat_head->ds_cnt; - if (((*data) = malloc(*ds_cnt * rows * sizeof(rrd_value_t))) == NULL) { + if (((*data) = (rrd_value_t*)malloc(*ds_cnt * rows * sizeof(rrd_value_t))) == NULL) { rrd_set_error("malloc fetch data area"); goto err_free_all_ds_namv; } @@ -383,24 +383,25 @@ int rrd_fetch_fn( "rra_start %lu, rra_end %lu, start_off %li, end_off %li\n", rra_start_time, rra_end_time, start_offset, end_offset); #endif - - /* fill the gap at the start if needs be */ - - if (start_offset <= 0) - rra_pointer = rrd.rra_ptr[chosen_rra].cur_row + 1; - else - rra_pointer = rrd.rra_ptr[chosen_rra].cur_row + 1 + start_offset; - - if (rrd_seek(rrd_file, (rra_base + (rra_pointer * (*ds_cnt) + /* only seek if the start time is before the end time */ + if (*start <= rra_end_time && *end >= rra_start_time - *step ){ + if (start_offset <= 0) + rra_pointer = rrd.rra_ptr[chosen_rra].cur_row + 1; + else + rra_pointer = rrd.rra_ptr[chosen_rra].cur_row + 1 + start_offset; + + if (rrd_seek(rrd_file, (rra_base + (rra_pointer * (*ds_cnt) * sizeof(rrd_value_t))), SEEK_SET) != 0) { - rrd_set_error("seek error in RRA"); - goto err_free_data; - } + rrd_set_error("seek error in RRA"); + goto err_free_data; + } #ifdef DEBUG - fprintf(stderr, "First Seek: rra_base %lu rra_pointer %lu\n", - rra_base, rra_pointer); + fprintf(stderr, "First Seek: rra_base %lu rra_pointer %lu\n", + rra_base, rra_pointer); #endif + } + /* step trough the array */ for (i = start_offset;