X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_update.c;h=d8e8866cfac79053d212dc5e09a05d768e15b58c;hb=6c7d5bae36890a97143ebb341bf58ef5f61604f3;hp=2c5cd37aa989d1beb03813045bfe00c9ac030ce5;hpb=0f399ee8cbe875b2831ea2870e60ee17800d811d;p=rrdtool.git diff --git a/src/rrd_update.c b/src/rrd_update.c index 2c5cd37..d8e8866 100644 --- a/src/rrd_update.c +++ b/src/rrd_update.c @@ -1,5 +1,5 @@ /***************************************************************************** - * RRDtool 1.2rc2 Copyright by Tobi Oetiker, 1997-2005 + * RRDtool 1.2.9 Copyright by Tobi Oetiker, 1997-2005 ***************************************************************************** * rrd_update.c RRD Update Function ***************************************************************************** @@ -13,7 +13,7 @@ #include #endif -#ifdef WIN32 +#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__) #include #include #include @@ -23,8 +23,9 @@ #include "rrd_rpncalc.h" #include "rrd_is_thread_safe.h" +#include "unused.h" -#ifdef WIN32 +#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__) /* * WIN32 does not have gettimeofday and struct timeval. This is a quick and dirty * replacement. @@ -69,7 +70,12 @@ int LockRRD(FILE *rrd_file); #ifdef HAVE_MMAP info_t *write_RRA_row (rrd_t *rrd, unsigned long rra_idx, unsigned long *rra_current, - unsigned short CDP_scratch_idx, FILE *rrd_file, + unsigned short CDP_scratch_idx, +#ifndef DEBUG +FILE UNUSED(*rrd_file), +#else +FILE *rrd_file, +#endif info_t *pcdp_summary, time_t *rra_time, void *rrd_mmaped_file); #else info_t *write_RRA_row (rrd_t *rrd, unsigned long rra_idx, @@ -89,7 +95,7 @@ int main(int argc, char **argv){ rrd_update(argc,argv); if (rrd_test_error()) { - printf("RRDtool 1.2rc2 Copyright by Tobi Oetiker, 1997-2005\n\n" + printf("RRDtool " PACKAGE_VERSION " Copyright by Tobi Oetiker, 1997-2005\n\n" "Usage: rrdupdate filename\n" "\t\t\t[--template|-t ds-name:ds-name:...]\n" "\t\t\ttime|N:value[:value...]\n\n" @@ -109,6 +115,7 @@ info_t *rrd_update_v(int argc, char **argv) char *template = NULL; info_t *result = NULL; infoval rc; + optind = 0; opterr = 0; /* initialize getopt */ while (1) { static struct option long_options[] = @@ -155,6 +162,7 @@ rrd_update(int argc, char **argv) { char *template = NULL; int rc; + optind = 0; opterr = 0; /* initialize getopt */ while (1) { static struct option long_options[] = @@ -244,9 +252,9 @@ _rrd_update(char *filename, char *template, int argc, char **argv, FILE *rrd_file; rrd_t rrd; - time_t current_time; - time_t rra_time; /* time of update for a RRA */ - unsigned long current_time_usec; /* microseconds part of current time */ + time_t current_time = 0; + time_t rra_time = 0; /* time of update for a RRA */ + unsigned long current_time_usec=0;/* microseconds part of current time */ struct timeval tmp_time; /* used for time conversion */ char **updvals; @@ -587,10 +595,18 @@ _rrd_update(char *filename, char *template, int argc, char **argv, for(i=0;ids_cnt;i++){ enum dst_en dst_idx; dst_idx= dst_conv(rrd.ds_def[i].dst); - /* NOTE: DST_CDEF should never enter this if block, because - * updvals[i+1][0] is initialized to 'U'; unless the caller - * accidently specified a value for the DST_CDEF. To handle - * this case, an extra check is required. */ + + /* make sure we do not build diffs with old last_ds values */ + if(rrd.ds_def[i].par[DS_mrhb_cnt].u_cnt < interval + && ( dst_idx == DST_COUNTER || dst_idx == DST_DERIVE)){ + strncpy(rrd.pdp_prep[i].last_ds,"U",LAST_DS_LEN-1); + } + + /* NOTE: DST_CDEF should never enter this if block, because + * updvals[i+1][0] is initialized to 'U'; unless the caller + * accidently specified a value for the DST_CDEF. To handle + * this case, an extra check is required. */ + if((updvals[i+1][0] != 'U') && (dst_idx != DST_CDEF) && rrd.ds_def[i].par[DS_mrhb_cnt].u_cnt >= interval) { @@ -1383,11 +1399,7 @@ _rrd_update(char *filename, char *template, int argc, char **argv, * critical except during the burning cycles. */ if (schedule_smooth) { -#ifndef WIN32 - rrd_file = fopen(filename,"r+"); -#else rrd_file = fopen(filename,"rb+"); -#endif rra_start = rra_begin; for (i = 0; i < rrd.stat_head -> rra_cnt; ++i) { @@ -1429,15 +1441,7 @@ LockRRD(FILE *rrdfile) rrd_fd = fileno(rrdfile); { -#ifndef WIN32 - struct flock lock; - lock.l_type = F_WRLCK; /* exclusive write lock */ - lock.l_len = 0; /* whole file */ - lock.l_start = 0; /* start of file */ - lock.l_whence = SEEK_SET; /* end of file */ - - rcstat = fcntl(rrd_fd, F_SETLK, &lock); -#else +#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__) struct _stat st; if ( _fstat( rrd_fd, &st ) == 0 ) { @@ -1445,6 +1449,14 @@ LockRRD(FILE *rrdfile) } else { rcstat = -1; } +#else + struct flock lock; + lock.l_type = F_WRLCK; /* exclusive write lock */ + lock.l_len = 0; /* whole file */ + lock.l_start = 0; /* start of file */ + lock.l_whence = SEEK_SET; /* end of file */ + + rcstat = fcntl(rrd_fd, F_SETLK, &lock); #endif } @@ -1455,7 +1467,12 @@ LockRRD(FILE *rrdfile) #ifdef HAVE_MMAP info_t *write_RRA_row (rrd_t *rrd, unsigned long rra_idx, unsigned long *rra_current, - unsigned short CDP_scratch_idx, FILE *rrd_file, + unsigned short CDP_scratch_idx, +#ifndef DEBUG +FILE UNUSED(*rrd_file), +#else +FILE *rrd_file, +#endif info_t *pcdp_summary, time_t *rra_time, void *rrd_mmaped_file) #else info_t