X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_restore.c;h=4ca223abd2b9460627b94eed0bfe6ec05cfeb8c8;hb=ad994d046d175fec8f67cc3b7cddf3cb77d341be;hp=f3764dac6ce21042dc38d55778586cbf09198f9d;hpb=ed287b7e76cec138d05b1d530af92998fd9709c7;p=rrdtool.git diff --git a/src/rrd_restore.c b/src/rrd_restore.c index f3764da..4ca223a 100644 --- a/src/rrd_restore.c +++ b/src/rrd_restore.c @@ -1,5 +1,5 @@ /***************************************************************************** - * RRDtool 1.1.x Copyright Tobias Oetiker, 1997 - 2002 + * RRDtool 1.2.0 Copyright by Tobi Oetiker, 1997-2005 ***************************************************************************** * rrd_restore.c creates new rrd from data dumped by rrd_dump.c *****************************************************************************/ @@ -8,6 +8,12 @@ #include "rrd_rpncalc.h" #include +#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__) +#include +#define open _open +#define close _close +#endif + /* Prototypes */ void xml_lc(char*); @@ -15,12 +21,12 @@ int skip(char **); int eat_tag(char **, char *); int read_tag(char **, char *, char *, void *); int xml2rrd(char*, rrd_t*, char); -int rrd_write(char *, rrd_t *); +int rrd_write(char *, rrd_t *, char); void parse_patch1028_RRA_params(char **buf, rrd_t *rrd, int rra_index); void parse_patch1028_CDP_params(char **buf, rrd_t *rrd, int rra_index, int ds_index); void parse_FAILURES_history(char **buf, rrd_t *rrd, int rra_index, int ds_index); -/* convert all ocurances of to */ +/* convert all occurrences of to */ void xml_lc(char* buf){ int intag=0; @@ -169,7 +175,7 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){ read_tag(&ptr2,"type",DST_FMT,rrd->ds_def[rrd->stat_head->ds_cnt-1].dst); /* test for valid type */ - if(dst_conv(rrd->ds_def[rrd->stat_head->ds_cnt-1].dst) == -1) return -1; + if( (int)dst_conv(rrd->ds_def[rrd->stat_head->ds_cnt-1].dst) == -1) return -1; if (dst_conv(rrd->ds_def[rrd->stat_head->ds_cnt-1].dst) != DST_CDEF) { @@ -194,12 +200,12 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){ while (eat_tag(&ptr2,"rra") == 1){ rrd->stat_head->rra_cnt++; - /* alocate and reset rra definition areas */ + /* allocate and reset rra definition areas */ if((rrd->rra_def = rrd_realloc(rrd->rra_def,rrd->stat_head->rra_cnt*sizeof(rra_def_t)))==NULL){ rrd_set_error("allocating rra_def"); return -1; } memset(&(rrd->rra_def[rrd->stat_head->rra_cnt-1]), 0, sizeof(rra_def_t)); - /* alocate and reset consolidation point areas */ + /* allocate and reset consolidation point areas */ if((rrd->cdp_prep = rrd_realloc(rrd->cdp_prep, rrd->stat_head->rra_cnt *rrd->stat_head->ds_cnt*sizeof(cdp_prep_t)))==NULL){ @@ -211,7 +217,7 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){ read_tag(&ptr2,"cf",CF_NAM_FMT,rrd->rra_def[rrd->stat_head->rra_cnt-1].cf_nam); /* test for valid type */ - if(cf_conv(rrd->rra_def[rrd->stat_head->rra_cnt-1].cf_nam) == -1) return -1; + if( (int)cf_conv(rrd->rra_def[rrd->stat_head->rra_cnt-1].cf_nam) == -1) return -1; read_tag(&ptr2,"pdp_per_row","%lu",&(rrd->rra_def[rrd->stat_head->rra_cnt-1].pdp_cnt)); /* support to read RRA parameters */ @@ -265,7 +271,7 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){ } eat_tag(&ptr2, "/params"); eat_tag(&ptr2,"cdp_prep"); - for(i=0;istat_head->ds_cnt;i++) + for(i=0;i< (int)rrd->stat_head->ds_cnt;i++) { eat_tag(&ptr2,"ds"); /* support to read CDP parameters */ @@ -348,7 +354,7 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){ rows++; mempool--; rrd->rra_def[rrd->stat_head->rra_cnt-1].row_cnt++; - for(i=0;istat_head->ds_cnt;i++){ + for(i=0;i< (int)rrd->stat_head->ds_cnt;i++){ rrd_value_t * value = &(rrd->rrd_value[(rows-1)*rrd->stat_head->ds_cnt+i]); @@ -387,7 +393,7 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){ return(-1); } - for(i=0; i stat_head->rra_cnt; i++) { + for(i=0; i < (int)rrd->stat_head->rra_cnt; i++) { /* last row in the xml file is the most recent; as * rrd_update increments the current row pointer, set cur_row * here to the last row. */ @@ -405,15 +411,25 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){ /* create and empty rrd file according to the specs given */ int -rrd_write(char *file_name, rrd_t *rrd) +rrd_write(char *file_name, rrd_t *rrd, char force_overwrite) { unsigned long i,ii,val_cnt; FILE *rrd_file=NULL; + int fdflags; + int fd; if (strcmp("-",file_name)==0){ rrd_file= stdout; } else { - int fd = open(file_name,O_RDWR|O_CREAT|O_EXCL,0666); +#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__) + fdflags = O_RDWR|O_BINARY|O_CREAT; +#else + fdflags = O_WRONLY|O_CREAT; +#endif + if (force_overwrite == 0) { + fdflags |= O_EXCL; + } + fd = open(file_name,fdflags,0666); if (fd == -1 || (rrd_file = fdopen(fd,"wb")) == NULL) { rrd_set_error("creating '%s': %s",file_name,rrd_strerror(errno)); if (fd != -1) @@ -469,11 +485,13 @@ rrd_restore(int argc, char **argv) rrd_t rrd; char *buf; char rc = 0; + char force_overwrite = 0; /* init rrd clean */ + optind = 0; opterr = 0; /* initialize getopt */ rrd_init(&rrd); if (argc<3) { - rrd_set_error("usage rrdtool %s [--range-check/-r] file.xml file.rrd",argv[0]); + rrd_set_error("usage rrdtool %s [--range-check/-r] [--force-overwrite/-f] file.xml file.rrd",argv[0]); return -1; } @@ -481,13 +499,14 @@ rrd_restore(int argc, char **argv) static struct option long_options[] = { {"range-check", required_argument, 0, 'r'}, + {"force-overwrite", required_argument, 0, 'f'}, {0,0,0,0} }; int option_index = 0; int opt; - opt = getopt_long(argc, argv, "r", long_options, &option_index); + opt = getopt_long(argc, argv, "r:f", long_options, &option_index); if (opt == EOF) break; @@ -496,9 +515,12 @@ rrd_restore(int argc, char **argv) case 'r': rc=1; break; + case 'f': + force_overwrite=1; + break; default: - rrd_set_error("usage rrdtool %s [--range-check|-r] file.xml file.rrd",argv[0]); - return -1; + rrd_set_error("usage rrdtool %s [--range-check|-r] [--force-overwrite/-f] file.xml file.rrd",argv[0]); + return -1; break; } } @@ -512,7 +534,7 @@ rrd_restore(int argc, char **argv) return -1; } free(buf); - if(rrd_write(argv[optind+1],&rrd)==-1){ + if(rrd_write(argv[optind+1],&rrd,force_overwrite)==-1){ rrd_free(&rrd); return -1; };