From: Florian Forster Date: Tue, 6 Jul 2010 07:43:02 +0000 (+0200) Subject: src/common.[ch]: Implement "get_time_args". X-Git-Tag: v4.0.0~152 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=edac1d40c3b678b8210d786f3a24d10e7c6fe151;p=collection4.git src/common.[ch]: Implement "get_time_args". --- diff --git a/src/action_graph.c b/src/action_graph.c index f9322d8..b3b815f 100644 --- a/src/action_graph.c +++ b/src/action_graph.c @@ -58,80 +58,6 @@ struct graph_data_s }; typedef struct graph_data_s graph_data_t; -static int get_time_args (graph_data_t *data) /* {{{ */ -{ - const char *begin_str; - const char *end_str; - long now; - long begin; - long end; - char *endptr; - long tmp; - - begin_str = param ("begin"); - end_str = param ("end"); - - now = (long) time (NULL); - data->now = now; - data->begin = now - 86400; - data->end = now; - - if (begin_str != NULL) - { - endptr = NULL; - errno = 0; - tmp = strtol (begin_str, &endptr, /* base = */ 0); - if ((endptr == begin_str) || (errno != 0)) - return (-1); - if (tmp <= 0) - begin = now + tmp; - else - begin = tmp; - } - else /* if (begin_str == NULL) */ - { - begin = now - 86400; - } - - if (end_str != NULL) - { - endptr = NULL; - errno = 0; - tmp = strtol (end_str, &endptr, /* base = */ 0); - if ((endptr == end_str) || (errno != 0)) - return (-1); - end = tmp; - if (tmp <= 0) - end = now + tmp; - else - end = tmp; - } - else /* if (end_str == NULL) */ - { - end = now; - } - - if (begin == end) - return (-1); - - if (begin > end) - { - tmp = begin; - begin = end; - end = tmp; - } - - data->begin = begin; - data->end = end; - - array_append (data->args->options, "-s"); - array_append_format (data->args->options, "%li", begin); - array_append (data->args->options, "-e"); - array_append_format (data->args->options, "%li", end); - - return (0); -} /* }}} int get_time_args */ - static void emulate_graph (int argc, char **argv) /* {{{ */ { int i; @@ -252,7 +178,14 @@ int action_graph (void) /* {{{ */ array_append (data.args->options, "--imgformat"); array_append (data.args->options, "PNG"); - get_time_args (&data); + status = get_time_args (&data.begin, &data.end, &data.now); + if (status == 0) + { + array_append (data.args->options, "-s"); + array_append_format (data.args->options, "%li", data.begin); + array_append (data.args->options, "-e"); + array_append_format (data.args->options, "%li", data.end); + } status = inst_get_rrdargs (cfg, inst, data.args); if (status != 0) diff --git a/src/common.c b/src/common.c index 23714ea..2a5bf45 100644 --- a/src/common.c +++ b/src/common.c @@ -39,6 +39,7 @@ #include "common.h" #include "graph_list.h" +#include "utils_cgi.h" #include #include @@ -264,4 +265,78 @@ char *strtolower_copy (const char *str) /* {{{ */ return (strtolower (strdup (str))); } /* }}} char *strtolower_copy */ +int get_time_args (long *ret_begin, long *ret_end, /* {{{ */ + long *ret_now) +{ + const char *begin_str; + const char *end_str; + long now; + long begin; + long end; + char *endptr; + long tmp; + + if ((ret_begin == NULL) || (ret_end == NULL)) + return (EINVAL); + + begin_str = param ("begin"); + end_str = param ("end"); + + now = (long) time (NULL); + if (ret_now != NULL) + *ret_now = now; + *ret_begin = now - 86400; + *ret_end = now; + + if (begin_str != NULL) + { + endptr = NULL; + errno = 0; + tmp = strtol (begin_str, &endptr, /* base = */ 0); + if ((endptr == begin_str) || (errno != 0)) + return (-1); + if (tmp <= 0) + begin = now + tmp; + else + begin = tmp; + } + else /* if (begin_str == NULL) */ + { + begin = now - 86400; + } + + if (end_str != NULL) + { + endptr = NULL; + errno = 0; + tmp = strtol (end_str, &endptr, /* base = */ 0); + if ((endptr == end_str) || (errno != 0)) + return (-1); + end = tmp; + if (tmp <= 0) + end = now + tmp; + else + end = tmp; + } + else /* if (end_str == NULL) */ + { + end = now; + } + + if (begin == end) + return (-1); + + if (begin > end) + { + tmp = begin; + begin = end; + end = tmp; + } + + *ret_begin = begin; + *ret_end = end; + + return (0); +} /* }}} int get_time_args */ + /* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/common.h b/src/common.h index 351fe3f..79a83ec 100644 --- a/src/common.h +++ b/src/common.h @@ -47,5 +47,14 @@ uint32_t fade_color (uint32_t color); char *strtolower (char *str); char *strtolower_copy (const char *str); +/* + * Parses the time parameters "begin" and "end" and returns the specified time + * in epoch in the longs pointed to by "ret_begin" and "ret_end". Returns + * non-zero on failure. If the optional "ret_now" pointer is not-NULL, the + * current time will be assigned to it. + */ +int get_time_args (long *ret_begin, long *ret_end, + long *ret_now); + #endif /* COMMON_H */ /* vim: set sw=2 sts=2 et fdm=marker : */