X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fbind.c;h=91e995f99300241630c091ba8f63b8e7cb59bcdc;hb=c88c2de1c9cd6795b30c34990a565d18b69221e7;hp=9bb662fc2ff731fa1941ec892f80fa12a0eda9da;hpb=e37e426d6646d6ff99834461f00c3dd79fa85d43;p=collectd.git diff --git a/src/bind.c b/src/bind.c index 9bb662fc..91e995f9 100644 --- a/src/bind.c +++ b/src/bind.c @@ -35,11 +35,19 @@ #endif #endif /* STRPTIME_NEEDS_STANDARDS */ +#if TIMEGM_NEEDS_BSD +#ifndef _BSD_SOURCE +#define _BSD_SOURCE 1 +#endif +#endif /* TIMEGM_NEEDS_BSD */ + #include "collectd.h" #include "common.h" #include "plugin.h" +#include + /* Some versions of libcurl don't include this themselves and then don't have * fd_set available. */ #if HAVE_SYS_SELECT_H @@ -429,7 +437,28 @@ static int bind_xml_read_timestamp(const char *xpath_expression, /* {{{ */ return (-1); } - *ret_value = mktime(&tm); +#if HAVE_TIMEGM + time_t t = timegm(&tm); + if (t == ((time_t)-1)) { + char errbuf[1024]; + ERROR("bind plugin: timegm() failed: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + return (-1); + } + *ret_value = t; +#else + time_t t = mktime(&tm); + if (t == ((time_t)-1)) { + char errbuf[1024]; + ERROR("bind plugin: mktime() failed: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + return (-1); + } + /* mktime assumes that tm is local time. Luckily, it also sets timezone to + * the offset used for the conversion, and we undo the conversion to convert + * back to UTC. */ + *ret_value = t - timezone; +#endif xmlXPathFreeObject(xpathObj); return (0); @@ -1613,5 +1642,3 @@ void module_register(void) { plugin_register_read("bind", bind_read); plugin_register_shutdown("bind", bind_shutdown); } /* void module_register */ - -/* vim: set sw=2 sts=2 ts=8 et fdm=marker : */