X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Frrd_update.c;h=95ca90ea3abc63004d97ebb06a6e6a440cc2c608;hb=e92b4bf1d1447e097b062d7dbfe36d0d5dcc2858;hp=cca6e52e331581ded088c5e24589970411ac999c;hpb=2e6c98e893777e4abf7b05cb4ecf81dde088cdb8;p=rrdtool.git diff --git a/src/rrd_update.c b/src/rrd_update.c index cca6e52..95ca90e 100644 --- a/src/rrd_update.c +++ b/src/rrd_update.c @@ -87,8 +87,8 @@ info_t *write_RRA_row (rrd_t *rrd, unsigned long rra_idx, unsigned short CDP_scratch_idx, FILE *rrd_file, info_t *pcdp_summary, time_t *rra_time); #endif -int rrd_update_r(char *filename, char *tmplt, int argc, char **argv); -int _rrd_update(char *filename, char *tmplt, int argc, char **argv, +int rrd_update_r(const char *filename, const char *tmplt, int argc, const char **argv); +int _rrd_update(const char *filename, const char *tmplt, int argc, const char **argv, info_t*); #define IFDNAN(X,Y) (isnan(X) ? (Y) : (X)); @@ -135,7 +135,7 @@ info_t *rrd_update_v(int argc, char **argv) rc.u_int = 0; result = info_push(NULL,sprintf_alloc("return_value"),RD_I_INT,rc); rc.u_int = _rrd_update(argv[optind], tmplt, - argc - optind - 1, argv + optind + 1, result); + argc - optind - 1, (const char **)(argv + optind + 1), result); result->value.u_int = rc.u_int; end_tag: return result; @@ -181,18 +181,18 @@ rrd_update(int argc, char **argv) } rc = rrd_update_r(argv[optind], tmplt, - argc - optind - 1, argv + optind + 1); + argc - optind - 1, (const char **)(argv + optind + 1)); return rc; } int -rrd_update_r(char *filename, char *tmplt, int argc, char **argv) +rrd_update_r(const char *filename, const char *tmplt, int argc, const char **argv) { return _rrd_update(filename, tmplt, argc, argv, NULL); } int -_rrd_update(char *filename, char *tmplt, int argc, char **argv, +_rrd_update(const char *filename, const char *tmplt, int argc, const char **argv, info_t *pcdp_summary) { @@ -364,13 +364,13 @@ _rrd_update(char *filename, char *tmplt, int argc, char **argv, /* we should work on a writeable copy here */ char *dsname; unsigned int tmpl_len; - tmplt = strdup(tmplt); - dsname = tmplt; + char *tmplt_copy = strdup(tmplt); + dsname = tmplt_copy; tmpl_cnt = 1; /* the first entry is the time */ - tmpl_len = strlen(tmplt); + tmpl_len = strlen(tmplt_copy); for(i=0;i<=tmpl_len ;i++) { - if (tmplt[i] == ':' || tmplt[i] == '\0') { - tmplt[i] = '\0'; + if (tmplt_copy[i] == ':' || tmplt_copy[i] == '\0') { + tmplt_copy[i] = '\0'; if (tmpl_cnt>rrd.stat_head->ds_cnt){ rrd_set_error("tmplt contains more DS definitions than RRD"); free(updvals); free(pdp_temp); @@ -380,23 +380,23 @@ _rrd_update(char *filename, char *tmplt, int argc, char **argv, if ((tmpl_idx[tmpl_cnt++] = ds_match(&rrd,dsname)) == -1){ rrd_set_error("unknown DS name '%s'",dsname); free(updvals); free(pdp_temp); - free(tmplt); + free(tmplt_copy); free(tmpl_idx); rrd_free(&rrd); fclose(rrd_file); return(-1); } else { /* the first element is always the time */ tmpl_idx[tmpl_cnt-1]++; - /* go to the next entry on the tmplt */ - dsname = &tmplt[i+1]; + /* go to the next entry on the tmplt_copy */ + dsname = &tmplt_copy[i+1]; /* fix the damage we did before */ if (ids_cnt))==NULL){ @@ -615,7 +615,7 @@ _rrd_update(char *filename, char *tmplt, int argc, char **argv, case DST_DERIVE: if(rrd.pdp_prep[i].last_ds[0] != 'U'){ for(ii=0;updvals[i+1][ii] != '\0';ii++){ - if(updvals[i+1][ii] < '0' || updvals[i+1][ii] > '9' || (ii==0 && updvals[i+1][ii] == '-')){ + if((updvals[i+1][ii] < '0' || updvals[i+1][ii] > '9') && (ii != 0 && updvals[i+1][ii] != '-')){ rrd_set_error("not a simple integer: '%s'",updvals[i+1]); break; }