index 288454c42af5aa802ae11da7ae363a1e6614852f..4baa5258d12f9e3b52a8698e9c9affef7bcaf91b 100644 (file)
--- a/program/src/rrd_update.c
+++ b/program/src/rrd_update.c
/*****************************************************************************
- * RRDtool 1.3.4 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.9 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_update.c RRD Update Function
*****************************************************************************
if (i < tmpl_cnt) {
updvals[tmpl_idx[i++]] = p + 1;
}
+ else {
+ rrd_set_error("found extra data on update argument: %s",p+1);
+ return -1;
+ }
}
}
if (i != tmpl_cnt) {
rrd_set_error("expected %lu data source readings (got %lu) from %s",
- tmpl_cnt - 1, i, input);
+ tmpl_cnt - 1, i - 1, input);
return -1;
}
*current_time_usec = tmp_time.tv_usec;
} else {
old_locale = setlocale(LC_NUMERIC, "C");
+ errno = 0;
tmp = strtod(updvals[0], 0);
+ if (errno > 0) {
+ rrd_set_error("converting '%s' to float: %s",
+ updvals[0], rrd_strerror(errno));
+ return -1;
+ };
setlocale(LC_NUMERIC, old_locale);
+ if (tmp < 0.0){
+ gettimeofday(&tmp_time, 0);
+ tmp = (double)tmp_time.tv_sec + (double)tmp_time.tv_usec * 1e-6f + tmp;
+ }
+
*current_time = floor(tmp);
*current_time_usec = (long) ((tmp - (double) *current_time) * 1e6f);
}
switch (dst_idx) {
case DST_COUNTER:
case DST_DERIVE:
- for (ii = 0; updvals[ds_idx + 1][ii] != '\0'; ii++) {
- if ((updvals[ds_idx + 1][ii] < '0'
- || updvals[ds_idx + 1][ii] > '9')
- && (ii != 0 && updvals[ds_idx + 1][ii] != '-')) {
+ if ( ( updvals[ds_idx + 1][0] < '0'
+ || updvals[ds_idx + 1][0] > '9' )
+ && updvals[ds_idx + 1][0] != '-'
+ && updvals[ds_idx + 1][0] != 'U'
+ && updvals[ds_idx + 1][0] == '\0'
+ ) {
+ rrd_set_error("not a simple integer: '%s'",
+ updvals[ds_idx + 1]);
+ return -1;
+ }
+ for (ii = 1; updvals[ds_idx + 1][ii] != '\0'; ii++) {
+ if ( updvals[ds_idx + 1][ii] < '0'
+ || updvals[ds_idx + 1][ii] > '9'
+ ) {
rrd_set_error("not a simple integer: '%s'",
updvals[ds_idx + 1]);
return -1;
old_locale = setlocale(LC_NUMERIC, "C");
errno = 0;
pdp_new[ds_idx] = strtod(updvals[ds_idx + 1], &endptr);
- setlocale(LC_NUMERIC, old_locale);
if (errno > 0) {
rrd_set_error("converting '%s' to float: %s",
updvals[ds_idx + 1], rrd_strerror(errno));
return -1;
};
+ setlocale(LC_NUMERIC, old_locale);
if (endptr[0] != '\0') {
rrd_set_error
("conversion of '%s' to float not complete: tail '%s'",
rate = pdp_new[ds_idx] / interval;
break;
case DST_GAUGE:
- errno = 0;
old_locale = setlocale(LC_NUMERIC, "C");
+ errno = 0;
pdp_new[ds_idx] =
strtod(updvals[ds_idx + 1], &endptr) * interval;
- setlocale(LC_NUMERIC, old_locale);
if (errno) {
rrd_set_error("converting '%s' to float: %s",
updvals[ds_idx + 1], rrd_strerror(errno));
return -1;
};
+ setlocale(LC_NUMERIC, old_locale);
if (endptr[0] != '\0') {
rrd_set_error
("conversion of '%s' to float not complete: tail '%s'",
scratch_idx = CDP_secondary_val,
step_subtract = 2) {
- off_t rra_pos_new;
+ size_t rra_pos_new;
#ifdef DEBUG
fprintf(stderr, " -- RRA Preseek %ld\n", rrd_file->pos);
#endif
/* append info to the return hash */
*pcdp_summary = rrd_info_push(*pcdp_summary,
sprintf_alloc
- ("[%d]RRA[%s][%lu]DS[%s]", rra_time,
+ ("[%lli]RRA[%s][%lu]DS[%s]", (long long)rra_time,
rrd->rra_def[rra_idx].cf_nam,
rrd->rra_def[rra_idx].pdp_cnt,
rrd->ds_def[ds_idx].ds_nam),
RD_I_VAL, iv);
}
+ errno = 0;
if (rrd_write(rrd_file,
&(rrd->cdp_prep[cdp_idx].scratch[CDP_scratch_idx].
u_val), sizeof(rrd_value_t)) != sizeof(rrd_value_t)) {