summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 096bb3f)
raw | patch | inline | side by side (parent: 096bb3f)
author | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Thu, 29 Apr 2010 05:44:24 +0000 (05:44 +0000) | ||
committer | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Thu, 29 Apr 2010 05:44:24 +0000 (05:44 +0000) |
thread-safe. Using it in the FETCH command reproducably segfaults the
caching daemon.
This replacement will only work with "simple" integers, i. e. times
specified as "1272470594" (sometime on April 28th) or "-3600" (one hour
ago). -- Florian Forster
git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@2074 a5681a0c-68f1-0310-ab6d-d61299d08faa
caching daemon.
This replacement will only work with "simple" integers, i. e. times
specified as "1272470594" (sometime on April 28th) or "-3600" (one hour
ago). -- Florian Forster
git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@2074 a5681a0c-68f1-0310-ab6d-d61299d08faa
src/rrd_daemon.c | patch | blob | history |
diff --git a/src/rrd_daemon.c b/src/rrd_daemon.c
index 6fda921be36cb754261ac7b06b88d9e21f8d9fd0..25675a1c9725ac3f61c1227d43a343e7c878da46 100644 (file)
--- a/src/rrd_daemon.c
+++ b/src/rrd_daemon.c
char *start_str;
char *end_str;
- rrd_time_value_t start_tv;
- rrd_time_value_t end_tv;
time_t start_tm;
time_t end_tm;
return (send_response (sock, RESP_ERR,
"flush_file (%s) failed with status %i.\n", file, status));
+ t = time (NULL); /* "now" */
+
/* Parse start time */
if (start_str != NULL)
{
- const char *errmsg;
+ char *endptr;
+ long value;
- errmsg = rrd_parsetime (start_str, &start_tv);
- if (errmsg != NULL)
+ endptr = NULL;
+ errno = 0;
+ value = strtol (start_str, &endptr, /* base = */ 0);
+ if ((endptr == start_str) || (errno != 0))
return (send_response(sock, RESP_ERR,
- "Cannot parse start time `%s': %s\n", start_str, errmsg));
+ "Cannot parse start time `%s': Only simple integers are allowed.\n",
+ start_str));
+
+ if (value > 0)
+ start_tm = (time_t) value;
+ else
+ start_tm = (time_t) (t + value);
}
else
- rrd_parsetime ("-86400", &start_tv);
+ {
+ start_tm = t - 86400;
+ }
/* Parse end time */
if (end_str != NULL)
{
- const char *errmsg;
+ char *endptr;
+ long value;
- errmsg = rrd_parsetime (end_str, &end_tv);
- if (errmsg != NULL)
+ endptr = NULL;
+ errno = 0;
+ value = strtol (end_str, &endptr, /* base = */ 0);
+ if ((endptr == end_str) || (errno != 0))
return (send_response(sock, RESP_ERR,
- "Cannot parse end time `%s': %s\n", end_str, errmsg));
+ "Cannot parse start time `%s': Only simple integers are allowed.\n",
+ end_str));
+
+ if (value > 0)
+ end_tm = (time_t) value;
+ else
+ end_tm = (time_t) (t + value);
}
else
- rrd_parsetime ("now", &end_tv);
-
- start_tm = 0;
- end_tm = 0;
- status = rrd_proc_start_end (&start_tv, &end_tv, &start_tm, &end_tm);
- if (status != 0)
- return (send_response(sock, RESP_ERR,
- "rrd_proc_start_end failed: %s\n", rrd_get_error ()));
+ {
+ end_tm = t;
+ }
step = -1;
ds_cnt = 0;