/*****************************************************************************
- * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.4.2 Copyright by Tobi Oetiker, 1997-2009
* Copyright by Florian Forster, 2008
*****************************************************************************
* 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;
}
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] != '-')) {
- rrd_set_error("not a simple integer: '%s'",
- updvals[ds_idx + 1]);
+ /* Check if this is a valid integer. `U' is already handled in
+ * another branch. */
+ for (ii = 0; updvals[ds_idx + 1][ii] != 0; ii++) {
+ if ((ii == 0) && (dst_idx == DST_DERIVE)
+ && (updvals[ds_idx + 1][ii] == '-'))
+ continue;
+
+ if ((updvals[ds_idx + 1][ii] < '0')
+ || (updvals[ds_idx + 1][ii] > '9')) {
+ rrd_set_error("not a simple %s integer: '%s'",
+ (dst_idx == DST_DERIVE) ? "signed" : "unsigned",
+ updvals[ds_idx + 1]);
return -1;
}
- }
+ } /* for (ii = 0; updvals[ds_idx + 1][ii] != 0; ii++) */
+
if (rrd->pdp_prep[ds_idx].last_ds[0] != 'U') {
pdp_new[ds_idx] =
rrd_diff(updvals[ds_idx + 1],
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;
if (errno) {
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
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)) {