X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Futils_time.c;h=6603c15e89f161afc832a5e2cd8ef08b335564ea;hp=aac6135e28f8bf7d1be5966d5316a64c28200e93;hb=633c3966f770e4d46651a2fe219a18d8a9907a9f;hpb=61fba41289decabc1a18c855fcd462fece9ab983 diff --git a/src/utils_time.c b/src/utils_time.c index aac6135e..6603c15e 100644 --- a/src/utils_time.c +++ b/src/utils_time.c @@ -1,19 +1,24 @@ /** - * collectd - src/utils_time.h - * Copyright (C) 2010 Florian octo Forster + * collectd - src/utils_time.c + * Copyright (C) 2010 Florian octo Forster * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; only version 2 of the License is applicable. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * * Authors: * Florian octo Forster @@ -61,4 +66,39 @@ cdtime_t cdtime (void) /* {{{ */ } /* }}} cdtime_t cdtime */ #endif +size_t cdtime_to_iso8601 (char *s, size_t max, cdtime_t t) /* {{{ */ +{ + struct timespec t_spec; + struct tm t_tm; + + size_t len; + + CDTIME_T_TO_TIMESPEC (t, &t_spec); + NORMALIZE_TIMESPEC (t_spec); + + if (localtime_r ((time_t *)&t_spec.tv_sec, &t_tm) == NULL) { + char errbuf[1024]; + ERROR ("cdtime_to_iso8601: localtime_r failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + return (0); + } + + len = strftime (s, max, "%Y-%m-%dT%H:%M:%S", &t_tm); + if (len == 0) + return 0; + + if (max - len > 2) { + int n = snprintf (s + len, max - len, ".%09i", (int)t_spec.tv_nsec); + len += (n < max - len) ? n : max - len; + } + + if (max - len > 3) { + int n = strftime (s + len, max - len, "%z", &t_tm); + len += (n < max - len) ? n : max - len; + } + + s[max - 1] = '\0'; + return len; +} /* }}} size_t cdtime_to_iso8601 */ + /* vim: set sw=2 sts=2 et fdm=marker : */