diff --git a/utils/rrdtool1/Makefile b/utils/rrdtool1/Makefile index 171c9b3f39..b1c5114e02 100644 --- a/utils/rrdtool1/Makefile +++ b/utils/rrdtool1/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=rrdtool1 PKG_VERSION:=1.0.50 -PKG_RELEASE:=4 +PKG_RELEASE:=5 PKG_BUILD_DIR:=$(BUILD_DIR)/rrdtool-$(PKG_VERSION) PKG_SOURCE:=rrdtool-$(PKG_VERSION).tar.gz diff --git a/utils/rrdtool1/patches/100-new-long-rrd.patch b/utils/rrdtool1/patches/100-new-long-rrd.patch new file mode 100644 index 0000000000..35b4136670 --- /dev/null +++ b/utils/rrdtool1/patches/100-new-long-rrd.patch @@ -0,0 +1,630 @@ +--- a/src/parsetime.c ++++ b/src/parsetime.c +@@ -715,7 +715,7 @@ day(struct rrd_time_value *ptv) + tlen = strlen(sc_token); + mon = atol(sc_token); + if (mon > 10*365*24*60*60) { +- montime = mon; ++ montime = (time_t) mon; + ptv->tm=*localtime(&montime); + token(); + break; +@@ -914,8 +914,11 @@ parsetime(char *tspec, struct rrd_time_v + + int proc_start_end (struct rrd_time_value *start_tv, + struct rrd_time_value *end_tv, +- time_t *start, +- time_t *end){ ++ TIME_INT *start, ++ TIME_INT *end){ ++ ++ time_t end_t, start_t; ++ + if (start_tv->type == RELATIVE_TO_END_TIME && /* same as the line above */ + end_tv->type == RELATIVE_TO_START_TIME) { + rrd_set_error("the start and end times cannot be specified " +@@ -935,25 +938,27 @@ int proc_start_end (struct rrd_time_valu + + if( start_tv->type == RELATIVE_TO_END_TIME) { + struct tm tmtmp; +- *end = mktime(&(end_tv->tm)) + end_tv->offset; +- tmtmp = *localtime(end); /* reinit end including offset */ ++ end_t = mktime(&(end_tv->tm)) + end_tv->offset; ++ *end = (TIME_INT) end_t; ++ tmtmp = *localtime(&end_t); /* reinit end including offset */ + tmtmp.tm_mday += start_tv->tm.tm_mday; + tmtmp.tm_mon += start_tv->tm.tm_mon; + tmtmp.tm_year += start_tv->tm.tm_year; +- *start = mktime(&tmtmp) + start_tv->offset; ++ *start = (TIME_INT) mktime(&tmtmp) + start_tv->offset; + } else { +- *start = mktime(&(start_tv->tm)) + start_tv->offset; ++ *start = (TIME_INT) mktime(&(start_tv->tm)) + start_tv->offset; + } + if (end_tv->type == RELATIVE_TO_START_TIME) { + struct tm tmtmp; +- *start = mktime(&(start_tv->tm)) + start_tv->offset; +- tmtmp = *localtime(start); ++ start_t = mktime(&(start_tv->tm)) + start_tv->offset; ++ *start = (TIME_INT) start_t; ++ tmtmp = *localtime(&start_t); + tmtmp.tm_mday += end_tv->tm.tm_mday; + tmtmp.tm_mon += end_tv->tm.tm_mon; + tmtmp.tm_year += end_tv->tm.tm_year; +- *end = mktime(&tmtmp) + end_tv->offset; ++ *end = (TIME_INT) mktime(&tmtmp) + end_tv->offset; + } else { +- *end = mktime(&(end_tv->tm)) + end_tv->offset; ++ *end = (TIME_INT) mktime(&(end_tv->tm)) + end_tv->offset; + } + return 0; + } /* proc_start_end */ +--- a/src/rrd_cgi.c ++++ b/src/rrd_cgi.c +@@ -352,7 +352,7 @@ int main(int argc, char *argv[]) { + time_t now; + now = time(NULL); + printf("Last-Modified: %s\n", http_time(&now)); +- now += labs(goodfor); ++ now += (time_t) labs(goodfor); + printf("Expires: %s\n", http_time(&now)); + if (goodfor < 0) { + printf("Refresh: %ld\n", labs(goodfor)); +@@ -491,6 +491,7 @@ char* printstrftime(long argc, char **ar + char formatted[MAX_STRFTIME_SIZE]; + struct tm *the_tm; + time_t start_tmp, end_tmp; ++ TIME_INT start_tmp_t, end_tmp_t; + + /* Make sure that we were given the right number of args */ + if( argc != 4) { +@@ -511,15 +512,17 @@ char* printstrftime(long argc, char **ar + rrd_set_error( "end time: %s", parsetime_error); + return (char *) -1; + } +- if( proc_start_end( &start_tv, &end_tv, &start_tmp, &end_tmp) == -1) { ++ if( proc_start_end( &start_tv, &end_tv, &start_tmp_t, &end_tmp_t) == -1) { + return (char *) -1; + } + + /* Do we do the start or end */ + if( strcasecmp( args[0], "START") == 0) { ++ start_tmp = (time_t) start_tmp_t; + the_tm = localtime( &start_tmp); + } + else if( strcasecmp( args[0], "END") == 0) { ++ end_tmp = (time_t) end_tmp_t; + the_tm = localtime( &end_tmp); + } + else { +@@ -726,7 +729,7 @@ char* printtimelast(long argc, char **ar + if (buf == NULL){ + return stralloc("[ERROR: allocating strftime buffer]"); + }; +- last = rrd_last(argc+1, args-1); ++ last = (time_t) rrd_last(argc+1, args-1); + if (rrd_test_error()) { + char *err = malloc((strlen(rrd_get_error())+DS_NAM_SIZE)*sizeof(char)); + sprintf(err, "[ERROR: %s]",rrd_get_error()); +--- a/src/rrd_create.c ++++ b/src/rrd_create.c +@@ -12,12 +12,12 @@ rrd_create(int argc, char **argv) + { + rrd_t rrd; + long i,long_tmp; +- time_t last_up; ++ TIME_INT last_up; + struct rrd_time_value last_up_tv; + char *parsetime_error = NULL; + + /* init last_up */ +- last_up = time(NULL)-10; ++ last_up = (TIME_INT) time(NULL)-10; + /* init rrd clean */ + rrd_init(&rrd); + /* static header */ +@@ -74,7 +74,7 @@ rrd_create(int argc, char **argv) + return(-1); + } + +- last_up = mktime(&last_up_tv.tm) + last_up_tv.offset; ++ last_up = (TIME_INT) mktime(&last_up_tv.tm) + last_up_tv.offset; + + if (last_up < 3600*24*365*10){ + rrd_set_error("the first entry to the RRD should be after 1980"); +--- a/src/rrd_dump.c ++++ b/src/rrd_dump.c +@@ -24,6 +24,7 @@ rrd_dump(int argc, char **argv) + long rra_base, rra_start, rra_next; + FILE *in_file; + rrd_t rrd; ++ time_t lastup_t; + + + if(rrd_open(argv[1],&in_file,&rrd, RRD_READONLY)==-1){ +@@ -34,8 +35,9 @@ rrd_dump(int argc, char **argv) + printf("\t %s \n",rrd.stat_head->version); + printf("\t %lu \n",rrd.stat_head->pdp_step); + #if HAVE_STRFTIME ++ lastup_t = (time_t) rrd.live_head->last_up; + strftime(somestring,200,"%Y-%m-%d %H:%M:%S %Z", +- localtime(&rrd.live_head->last_up)); ++ localtime(&lastup_t)); + #else + # error "Need strftime" + #endif +@@ -115,10 +117,10 @@ rrd_dump(int argc, char **argv) + fseek(in_file,rra_start,SEEK_SET); + ii=0; /* wrap if max row cnt is reached */ + } +- now = (rrd.live_head->last_up ++ now = (time_t) ((rrd.live_head->last_up + - rrd.live_head->last_up + % (rrd.rra_def[i].pdp_cnt*rrd.stat_head->pdp_step)) +- + (timer*rrd.rra_def[i].pdp_cnt*rrd.stat_head->pdp_step); ++ + (timer*rrd.rra_def[i].pdp_cnt*rrd.stat_head->pdp_step)); + + timer++; + #if HAVE_STRFTIME +--- a/src/rrd_fetch.c ++++ b/src/rrd_fetch.c +@@ -16,8 +16,8 @@ + int + rrd_fetch(int argc, + char **argv, +- time_t *start, +- time_t *end, /* which time frame do you want ? ++ TIME_INT *start, ++ TIME_INT *end, /* which time frame do you want ? + * will be changed to represent reality */ + unsigned long *step, /* which stepsize do you want? + * will be changed to represent reality */ +@@ -28,7 +28,7 @@ rrd_fetch(int argc, + + + long step_tmp =1; +- time_t start_tmp=0, end_tmp=0; ++ TIME_INT start_tmp=0, end_tmp=0; + enum cf_en cf_idx; + + struct rrd_time_value start_tv, end_tv; +@@ -119,8 +119,8 @@ int + rrd_fetch_fn( + char *filename, /* name of the rrd */ + enum cf_en cf_idx, /* which consolidation function ?*/ +- time_t *start, +- time_t *end, /* which time frame do you want ? ++ TIME_INT *start, ++ TIME_INT *end, /* which time frame do you want ? + * will be changed to represent reality */ + unsigned long *step, /* which stepsize do you want? + * will be changed to represent reality */ +@@ -130,7 +130,7 @@ rrd_fetch_fn( + { + long i,ii; + FILE *in_file; +- time_t cal_start,cal_end, rra_start_time,rra_end_time; ++ TIME_INT cal_start,cal_end, rra_start_time,rra_end_time; + long best_full_rra=0, best_part_rra=0, chosen_rra=0, rra_pointer=0; + long best_step_diff=0, tmp_step_diff=0, tmp_match=0, best_match=0; + long full_match, rra_base; +--- a/src/rrd_first.c ++++ b/src/rrd_first.c +@@ -8,13 +8,13 @@ + + #include "rrd_tool.h" + +-time_t ++TIME_INT + rrd_first(int argc, char **argv) + { + long rra_start, + timer; + unsigned long target_rraindex=0; +- time_t then; ++ TIME_INT then; + char *endptr; + FILE *in_file; + rrd_t rrd; +--- a/src/rrd_format.h ++++ b/src/rrd_format.h +@@ -200,7 +200,7 @@ typedef struct rra_def_t { + ****************************************************************************/ + + typedef struct live_head_t { +- time_t last_up; /* when was rrd last updated */ ++ TIME_INT last_up; /* when was rrd last updated */ + } live_head_t; + + +--- a/src/rrd_graph.c ++++ b/src/rrd_graph.c +@@ -123,7 +123,7 @@ col_trip_t graph_col[] = { /* default co + * ((double)(x) - im->start)+0.5) */ + /* initialize with xtr(im,0); */ + int +-xtr(image_desc_t *im,time_t mytime){ ++xtr(image_desc_t *im,TIME_INT mytime){ + static double pixie; + if (mytime==0){ + pixie = (double) im->xsize / (double)(im->end - im->start); +@@ -486,8 +486,8 @@ void + reduce_data( + enum cf_en cf, /* which consolidation function ?*/ + unsigned long cur_step, /* step the data currently is in */ +- time_t *start, /* start, end and step as requested ... */ +- time_t *end, /* ... by the application will be ... */ ++ TIME_INT *start, /* start, end and step as requested ... */ ++ TIME_INT *end, /* ... by the application will be ... */ + unsigned long *step, /* ... adjusted to represent reality */ + unsigned long *ds_cnt, /* number of data sources in file */ + rrd_value_t **data) /* two dimensional array containing the data */ +@@ -853,18 +853,20 @@ str2rpn(image_desc_t *im,char *expr){ + time was. Return it in seconds */ + + int +-tzoffset( time_t now ){ ++tzoffset( TIME_INT now ){ + int gm_sec, gm_min, gm_hour, gm_yday, gm_year, + l_sec, l_min, l_hour, l_yday, l_year; + struct tm *t; + int off; +- t = gmtime(&now); ++ time_t now_t; ++ now_t = (time_t) now; ++ t = gmtime(&now_t); + gm_sec = t->tm_sec; + gm_min = t->tm_min; + gm_hour = t->tm_hour; + gm_yday = t->tm_yday; + gm_year = t->tm_year; +- t = localtime(&now); ++ t = localtime(&now_t); + l_sec = t->tm_sec; + l_min = t->tm_min; + l_hour = t->tm_hour; +@@ -893,7 +895,7 @@ data_calc( image_desc_t *im){ + int dataidx; + long *steparray; + int stepcnt; +- time_t now; ++ TIME_INT now; + double *stack = NULL; + long dc_stacksize = 0; + +@@ -1433,14 +1435,16 @@ data_proc( image_desc_t *im ){ + + /* identify the point where the first gridline, label ... gets placed */ + +-time_t ++TIME_INT + find_first_time( +- time_t start, /* what is the initial time */ ++ TIME_INT start_t, /* what is the initial time */ + enum tmt_en baseint, /* what is the basic interval */ + long basestep /* how many if these do we jump a time */ + ) + { + struct tm tm; ++ time_t start; ++ start = (time_t) start_t; + tm = *localtime(&start); + switch(baseint){ + case TMT_SECOND: +@@ -1485,15 +1489,17 @@ find_first_time( + return mktime(&tm); + } + /* identify the point where the next gridline, label ... gets placed */ +-time_t ++TIME_INT + find_next_time( +- time_t current, /* what is the initial time */ ++ TIME_INT current_t, /* what is the initial time */ + enum tmt_en baseint, /* what is the basic interval */ + long basestep /* how many if these do we jump a time */ + ) + { + struct tm tm; +- time_t madetime; ++ time_t current; ++ current = (time_t) current_t; ++ TIME_INT madetime; + tm = *localtime(¤t); + do { + switch(baseint){ +@@ -2143,7 +2149,8 @@ vertical_grid( + image_desc_t *im ) + { + int xlab_sel; /* which sort of label and grid ? */ +- time_t ti, tilab; ++ TIME_INT ti, tilab; ++ time_t tilab_t; + long factor; + char graph_label[100]; + gdPoint polyPoints[4]; /* points for filled graph and more*/ +@@ -2231,9 +2238,10 @@ vertical_grid( + ){ + int gr_pos,width; + tilab= ti + im->xlab_user.precis/2; /* correct time for the label */ ++ tilab_t = (time_t) tilab; + + #if HAVE_STRFTIME +- strftime(graph_label,99,im->xlab_user.stst,localtime(&tilab)); ++ strftime(graph_label,99,im->xlab_user.stst,localtime(&tilab_t)); + #else + # error "your libc has no strftime I guess we'll abort the exercise here." + #endif +@@ -2487,7 +2495,7 @@ int lazy_check(image_desc_t *im){ + return 0; /* can't stat */ + /* one pixel in the existing graph is more then what we would + change here ... */ +- if (time(NULL) - gifstat.st_mtime > ++ if ((TIME_INT) time(NULL) - gifstat.st_mtime > + (im->end - im->start) / im->xsize) + return 0; + if ((fd = fopen(im->graphfile,"rb")) == NULL) +@@ -2881,7 +2889,7 @@ rrd_graph(int argc, char **argv, char ** + image_desc_t im; + int i; + long long_tmp; +- time_t start_tmp=0,end_tmp=0; ++ TIME_INT start_tmp=0,end_tmp=0; + char scan_gtm[12],scan_mtm[12],scan_ltm[12],col_nam[12]; + char symname[100]; + unsigned int col_red,col_green,col_blue; +--- a/src/rrd_graph.h ++++ b/src/rrd_graph.h +@@ -90,11 +90,11 @@ typedef struct graph_desc_t { + char legend[FMT_LEG_LEN+5]; /* legend*/ + gdPoint legloc; /* location of legend */ + double yrule; /* value for y rule line */ +- time_t xrule; /* value for x rule line */ ++ TIME_INT xrule; /* value for x rule line */ + rpnp_t *rpnp; /* instructions for CDEF function */ + + /* description of data fetched for the graph element */ +- time_t start,end; /* timestaps for first and last data element */ ++ TIME_INT start,end; /* timestaps for first and last data element */ + unsigned long step; /* time between samples */ + unsigned long ds_cnt; /* how many data sources are there in the fetch */ + long data_first; /* first pointer to this data */ +@@ -121,7 +121,7 @@ typedef struct image_desc_t { + double ygridstep; /* user defined step for y grid */ + int ylabfact; /* every how many y grid shall a label be written ? */ + +- time_t start,end; /* what time does the graph cover */ ++ TIME_INT start,end; /* what time does the graph cover */ + unsigned long step; /* any preference for the default step ? */ + rrd_value_t minval,maxval; /* extreme values in the data */ + int rigid; /* do not expand range even with +@@ -160,7 +160,7 @@ typedef struct image_desc_t { + } image_desc_t; + + /* Prototypes */ +-int xtr(image_desc_t *,time_t); ++int xtr(image_desc_t *,TIME_INT); + int ytr(image_desc_t *, double); + enum gf_en gf_conv(char *); + enum if_en if_conv(char *); +@@ -170,16 +170,16 @@ int im_free(image_desc_t *); + void auto_scale( image_desc_t *, double *, char **, double *); + void si_unit( image_desc_t *); + void expand_range(image_desc_t *); +-void reduce_data( enum cf_en, unsigned long, time_t *, time_t *, unsigned long *, unsigned long *, rrd_value_t **); ++void reduce_data( enum cf_en, unsigned long, TIME_INT *, TIME_INT *, unsigned long *, unsigned long *, rrd_value_t **); + int data_fetch( image_desc_t *); + long find_var(image_desc_t *, char *); + long lcd(long *); + int data_calc( image_desc_t *); + int data_proc( image_desc_t *); +-time_t find_first_time( time_t, enum tmt_en, long); +-time_t find_next_time( time_t, enum tmt_en, long); ++TIME_INT find_first_time( TIME_INT, enum tmt_en, long); ++TIME_INT find_next_time( TIME_INT, enum tmt_en, long); + void gator( gdImagePtr, int, int); +-int tzoffset(time_t); ++int tzoffset(TIME_INT); + int print_calc(image_desc_t *, char ***); + int leg_place(image_desc_t *); + int horizontal_grid(gdImagePtr, image_desc_t *); +--- a/src/rrd.h ++++ b/src/rrd.h +@@ -17,6 +17,9 @@ extern "C" { + #define _RRDLIB_H + + #include ++#include ++ ++#define TIME_INT long + + /* Transplanted from rrd_format.h */ + typedef double rrd_value_t; /* the data storage type is +@@ -27,15 +30,15 @@ typedef double rrd_value_t; + int rrd_create(int, char **); + int rrd_update(int, char **); + int rrd_graph(int, char **, char ***, int *, int *); +-int rrd_fetch(int, char **, time_t *, time_t *, unsigned long *, ++int rrd_fetch(int, char **, TIME_INT *, TIME_INT *, unsigned long *, + unsigned long *, char ***, rrd_value_t **); + int rrd_restore(int, char **); + int rrd_dump(int, char **); + int rrd_tune(int, char **); +-time_t rrd_last(int, char **); +-time_t rrd_first(int, char **); ++TIME_INT rrd_last(int, char **); ++TIME_INT rrd_first(int, char **); + int rrd_resize(int, char **); +-int rrd_xport(int, char **, int *, time_t *, time_t *, ++int rrd_xport(int, char **, int *, TIME_INT *, TIME_INT *, + unsigned long *, unsigned long *, + char ***, rrd_value_t **); + +@@ -57,7 +60,7 @@ struct rrd_time_value { + char *parsetime(char *spec, struct rrd_time_value *ptv); + /* END parsetime.h */ + +-int proc_start_end (struct rrd_time_value *, struct rrd_time_value *, time_t *, time_t *); ++int proc_start_end (struct rrd_time_value *, struct rrd_time_value *, TIME_INT *, TIME_INT *); + + /* HELPER FUNCTIONS */ + void rrd_set_error(char *,...); +--- a/src/rrd_last.c ++++ b/src/rrd_last.c +@@ -8,11 +8,11 @@ + + #include "rrd_tool.h" + +-time_t ++TIME_INT + rrd_last(int argc, char **argv) + { + FILE *in_file; +- time_t lastup; ++ TIME_INT lastup; + + rrd_t rrd; + +--- a/src/rrd_tool.c ++++ b/src/rrd_tool.c +@@ -343,7 +343,7 @@ int HandleInputLine(int argc, char **arg + else if (strcmp("update", argv[1]) == 0) + rrd_update(argc-1, &argv[1]); + else if (strcmp("fetch", argv[1]) == 0) { +- time_t start,end; ++ TIME_INT start,end; + unsigned long step, ds_cnt,i,ii; + rrd_value_t *data,*datai; + char **ds_namv; +@@ -367,7 +367,7 @@ int HandleInputLine(int argc, char **arg + } else if (strcmp("xport", argv[1]) == 0) { + int xxsize; + int j; +- time_t i,start,end; ++ TIME_INT i,start,end; + unsigned long step, col_cnt,row_cnt; + rrd_value_t *data,*ptr; + char **legend_v; +--- a/src/rrd_tool.h ++++ b/src/rrd_tool.h +@@ -134,7 +134,7 @@ void gdImagePng(gdImagePtr im, FILE *out + + int rrd_create_fn(char *file_name, rrd_t *rrd); + int rrd_fetch_fn(char *filename, enum cf_en cf_idx, +- time_t *start,time_t *end, ++ TIME_INT *start,TIME_INT *end, + unsigned long *step, + unsigned long *ds_cnt, + char ***ds_namv, +--- a/src/rrd_update.c ++++ b/src/rrd_update.c +@@ -91,7 +91,7 @@ rrd_update(int argc, char **argv) + + FILE *rrd_file; + rrd_t rrd; +- time_t current_time = time(NULL); ++ TIME_INT current_time = (TIME_INT) time(NULL); + char **updvals; + int wrote_to_file = 0; + char *template = NULL; +@@ -273,7 +273,7 @@ rrd_update(int argc, char **argv) + + /* get the time from the reading ... handle N */ + if (strcmp(updvals[0],"N")==0){ +- current_time = time(NULL); ++ current_time = (TIME_INT) time(NULL); + } else { + errno = 0; + current_time = strtol(updvals[0],&endptr,10); +--- a/src/rrd_xport.c ++++ b/src/rrd_xport.c +@@ -15,12 +15,12 @@ + + + int rrd_xport(int, char **, int *, +- time_t *, time_t *, ++ TIME_INT *, TIME_INT *, + unsigned long *, unsigned long *, + char ***, rrd_value_t **); + + int rrd_xport_fn(image_desc_t *, +- time_t *, time_t *, ++ TIME_INT *, TIME_INT *, + unsigned long *, unsigned long *, + char ***, rrd_value_t **); + +@@ -29,8 +29,8 @@ int rrd_xport_fn(image_desc_t *, + /* mostly rrd_graph(), just pushed a bit here and stretched a bit there */ + int + rrd_xport(int argc, char **argv, int *xsize, +- time_t *start, +- time_t *end, /* which time frame do you want ? ++ TIME_INT *start, ++ TIME_INT *end, /* which time frame do you want ? + * will be changed to represent reality */ + unsigned long *step, /* which stepsize do you want? + * will be changed to represent reality */ +@@ -42,7 +42,7 @@ rrd_xport(int argc, char **argv, int *xs + image_desc_t im; + int i; + long long_tmp; +- time_t start_tmp=0,end_tmp=0; ++ TIME_INT start_tmp=0,end_tmp=0; + char symname[100]; + long scancount; + struct rrd_time_value start_tv, end_tv; +@@ -286,8 +286,8 @@ rrd_xport(int argc, char **argv, int *xs + + int + rrd_xport_fn(image_desc_t *im, +- time_t *start, +- time_t *end, /* which time frame do you want ? ++ TIME_INT *start, ++ TIME_INT *end, /* which time frame do you want ? + * will be changed to represent reality */ + unsigned long *step, /* which stepsize do you want? + * will be changed to represent reality */ +@@ -307,9 +307,9 @@ rrd_xport_fn(image_desc_t *im, + char **legend_list; + int ii = 0; + +- time_t start_tmp = 0; +- time_t end_tmp = 0; +- time_t curr_ts; ++ TIME_INT start_tmp = 0; ++ TIME_INT end_tmp = 0; ++ TIME_INT curr_ts; + unsigned long step_tmp = 1; + + int dataIndex; +--- a/contrib/trytime/trytime.c ++++ b/contrib/trytime/trytime.c +@@ -24,7 +24,8 @@ int main ( int ac, char **av ) + int option_index = 0; + int opt; + +- time_t start_tmp, end_tmp, Now = time(NULL); ++ time_t start_time, end_time, Now = time(NULL); ++ TIME_INT start_tmp, end_tmp; + char tim_b[200]; + + struct rrd_time_value start_tv, end_tv; +@@ -80,7 +81,8 @@ int main ( int ac, char **av ) + exit(1); + } + +- strftime(tim_b,100,"%c %Z",localtime(&start_tmp)); ++ start_time = (time_t) start_tmp; ++ strftime(tim_b,100,"%c %Z",localtime(&start_time)); + if( *soption ) + printf( "Start time was specified as: '%s',\n" + "for me this means: %s (or %ld sec since epoch)\n\n", +@@ -90,7 +92,8 @@ int main ( int ac, char **av ) + "for me this means: %s (or %ld sec since epoch)\n\n", + tim_b, start_tmp ); + +- strftime(tim_b,100,"%c %Z",localtime(&end_tmp)); ++ end_time = (time_t) end_tmp; ++ strftime(tim_b,100,"%c %Z",localtime(&end_time)); + if( *eoption ) + printf( "End time was specified as: '%s',\n" + "for me this means: %s (or %ld sec since epoch)\n",