From: Florian Forster Date: Wed, 26 Oct 2016 15:09:17 +0000 (+0200) Subject: src/daemon/utils_time.h: Use composite literals in all macros. X-Git-Tag: collectd-5.7.0~45^2~3 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=a9f509bacfda6be6882527a16563f260e4373246 src/daemon/utils_time.h: Use composite literals in all macros. This allows to take the address of all these macros. Unfortunately, this means we require special macors for initializing static variables, but fortunately this is not very commonly done. --- diff --git a/src/daemon/plugin.c b/src/daemon/plugin.c index aa133786..8b84e6a7 100644 --- a/src/daemon/plugin.c +++ b/src/daemon/plugin.c @@ -108,7 +108,7 @@ static c_avl_tree_t *data_sets; static char *plugindir = NULL; #ifndef DEFAULT_MAX_READ_INTERVAL -# define DEFAULT_MAX_READ_INTERVAL TIME_T_TO_CDTIME_T (86400) +# define DEFAULT_MAX_READ_INTERVAL TIME_T_TO_CDTIME_T_STATIC (86400) #endif static c_heap_t *read_heap = NULL; static llist_t *read_list; diff --git a/src/daemon/utils_time.h b/src/daemon/utils_time.h index f9973698..2d83e0bb 100644 --- a/src/daemon/utils_time.h +++ b/src/daemon/utils_time.h @@ -48,58 +48,85 @@ extern cdtime_t cdtime_mock; /* typedef uint64_t cdtime_t; */ /* 2^30 = 1073741824 */ -#define TIME_T_TO_CDTIME_T(t) (((cdtime_t) (t)) << 30) - -#define MS_TO_CDTIME_T(ms) (((((cdtime_t) (ms)) / 1000) << 30) | \ - ((((((cdtime_t) (ms)) % 1000) << 30) + 500) / 1000)) -#define US_TO_CDTIME_T(us) (((((cdtime_t) (us)) / 1000000) << 30) | \ - ((((((cdtime_t) (us)) % 1000000) << 30) + 500000) / 1000000)) -#define NS_TO_CDTIME_T(ns) (((((cdtime_t) (ns)) / 1000000000) << 30) | \ - ((((((cdtime_t) (ns)) % 1000000000) << 30) + 500000000) / 1000000000)) - -#define CDTIME_T_TO_TIME_T(t) ((time_t) (((t) + (1 << 29)) >> 30)) -#define CDTIME_T_TO_MS(t) ((uint64_t) ((((t) >> 30) * 1000) + \ - ((((t) & 0x3fffffff) * 1000 + (1 << 29)) >> 30))) -#define CDTIME_T_TO_US(t) ((uint64_t) ((((t) >> 30) * 1000000) + \ - ((((t) & 0x3fffffff) * 1000000 + (1 << 29)) >> 30))) -#define CDTIME_T_TO_NS(t) ((uint64_t) ((((t) >> 30) * 1000000000) + \ - ((((t) & 0x3fffffff) * 1000000000 + (1 << 29)) >> 30))) - -#define CDTIME_T_TO_DOUBLE(t) (((double) (t)) / 1073741824.0) -#define DOUBLE_TO_CDTIME_T(d) ((cdtime_t) ((d) * 1073741824.0)) - -#define CDTIME_T_TO_TIMEVAL(t) (struct timeval) { \ - .tv_sec = (time_t) ((t) >> 30), \ - .tv_usec = (suseconds_t) ((((t) & 0x3fffffff) * 1000000 + (1 << 29)) >> 30), \ -} -#define TIMEVAL_TO_CDTIME_T(tv) US_TO_CDTIME_T(1000000 * (tv)->tv_sec + (tv)->tv_usec) - -#define CDTIME_T_TO_TIMESPEC(t) (struct timespec) { \ - .tv_sec = (time_t) ((t) >> 30), \ - .tv_nsec = (long) ((((t) & 0x3fffffff) * 1000000000 + (1 << 29)) >> 30), \ -} -#define TIMESPEC_TO_CDTIME_T(ts) NS_TO_CDTIME_T(1000000000ULL * (ts)->tv_sec + (ts)->tv_nsec) - -cdtime_t cdtime (void); - -#define RFC3339_SIZE 26 /* 2006-01-02T15:04:05+00:00 */ -#define RFC3339NANO_SIZE 36 /* 2006-01-02T15:04:05.999999999+00:00 */ +#define TIME_T_TO_CDTIME_T_STATIC(t) (((cdtime_t)(t)) << 30) +#define TIME_T_TO_CDTIME_T(t) \ + (cdtime_t) { TIME_T_TO_CDTIME_T_STATIC(t) } + +#define MS_TO_CDTIME_T(ms) \ + (cdtime_t) { \ + ((((cdtime_t)(ms)) / 1000) << 30) | \ + ((((((cdtime_t)(ms)) % 1000) << 30) + 500) / 1000) \ + } +#define US_TO_CDTIME_T(us) \ + (cdtime_t) { \ + ((((cdtime_t)(us)) / 1000000) << 30) | \ + ((((((cdtime_t)(us)) % 1000000) << 30) + 500000) / 1000000) \ + } +#define NS_TO_CDTIME_T(ns) \ + (cdtime_t) { \ + ((((cdtime_t)(ns)) / 1000000000) << 30) | \ + ((((((cdtime_t)(ns)) % 1000000000) << 30) + 500000000) / 1000000000) \ + } + +#define CDTIME_T_TO_TIME_T(t) \ + (time_t) { (time_t)(((t) + (1 << 29)) >> 30) } +#define CDTIME_T_TO_MS(t) \ + (uint64_t) { \ + (uint64_t)((((t) >> 30) * 1000) + \ + ((((t)&0x3fffffff) * 1000 + (1 << 29)) >> 30)) \ + } +#define CDTIME_T_TO_US(t) \ + (uint64_t) { \ + (uint64_t)((((t) >> 30) * 1000000) + \ + ((((t)&0x3fffffff) * 1000000 + (1 << 29)) >> 30)) \ + } +#define CDTIME_T_TO_NS(t) \ + (uint64_t) { \ + (uint64_t)((((t) >> 30) * 1000000000) + \ + ((((t)&0x3fffffff) * 1000000000 + (1 << 29)) >> 30)) \ + } + +#define CDTIME_T_TO_DOUBLE(t) \ + (double) { ((double)(t)) / 1073741824.0 } +#define DOUBLE_TO_CDTIME_T(d) \ + (cdtime_t) { (cdtime_t)((d)*1073741824.0) } + +#define CDTIME_T_TO_TIMEVAL(t) \ + (struct timeval) { \ + .tv_sec = (time_t)((t) >> 30), \ + .tv_usec = (suseconds_t)((((t)&0x3fffffff) * 1000000 + (1 << 29)) >> 30), \ + } +#define TIMEVAL_TO_CDTIME_T(tv) \ + US_TO_CDTIME_T(1000000 * (tv)->tv_sec + (tv)->tv_usec) + +#define CDTIME_T_TO_TIMESPEC(t) \ + (struct timespec) { \ + .tv_sec = (time_t)((t) >> 30), \ + .tv_nsec = (long)((((t)&0x3fffffff) * 1000000000 + (1 << 29)) >> 30), \ + } +#define TIMESPEC_TO_CDTIME_T(ts) \ + NS_TO_CDTIME_T(1000000000ULL * (ts)->tv_sec + (ts)->tv_nsec) + +cdtime_t cdtime(void); + +#define RFC3339_SIZE 26 /* 2006-01-02T15:04:05+00:00 */ +#define RFC3339NANO_SIZE 36 /* 2006-01-02T15:04:05.999999999+00:00 */ /* rfc3339 formats a cdtime_t time as UTC in RFC 3339 zulu format with second * precision, e.g., "2006-01-02T15:04:05Z". */ -int rfc3339 (char *buffer, size_t buffer_size, cdtime_t t); +int rfc3339(char *buffer, size_t buffer_size, cdtime_t t); /* rfc3339nano formats a cdtime_t as UTC time in RFC 3339 zulu format with * nanosecond precision, e.g., "2006-01-02T15:04:05.999999999Z". */ -int rfc3339nano (char *buffer, size_t buffer_size, cdtime_t t); +int rfc3339nano(char *buffer, size_t buffer_size, cdtime_t t); /* rfc3339 formats a cdtime_t time as local in RFC 3339 format with second * precision, e.g., "2006-01-02T15:04:05+00:00". */ -int rfc3339_local (char *buffer, size_t buffer_size, cdtime_t t); +int rfc3339_local(char *buffer, size_t buffer_size, cdtime_t t); /* rfc3339nano formats a cdtime_t time as local in RFC 3339 format with * nanosecond precision, e.g., "2006-01-02T15:04:05.999999999+00:00". */ -int rfc3339nano_local (char *buffer, size_t buffer_size, cdtime_t t); +int rfc3339nano_local(char *buffer, size_t buffer_size, cdtime_t t); #endif /* UTILS_TIME_H */ /* vim: set sw=2 sts=2 et : */ diff --git a/src/rrdtool.c b/src/rrdtool.c index 094dd42a..f5e01c81 100644 --- a/src/rrdtool.c +++ b/src/rrdtool.c @@ -110,7 +110,7 @@ static rrdcreate_config_t rrdcreate_config = * ALWAYS lock `cache_lock' first! */ static cdtime_t cache_timeout = 0; static cdtime_t cache_flush_timeout = 0; -static cdtime_t random_timeout = TIME_T_TO_CDTIME_T (1); +static cdtime_t random_timeout = TIME_T_TO_CDTIME_T_STATIC (1); static cdtime_t cache_flush_last; static c_avl_tree_t *cache = NULL; static pthread_mutex_t cache_lock = PTHREAD_MUTEX_INITIALIZER;