time.c revision dafcb997e390efa4423883dafd100c975c4095d6
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * Copyright (C) 2004 Internet Systems Consortium, Inc. ("ISC")
4c713bf9401c2e55660bdcbba8d71032f482a330Tinderbox User * Copyright (C) 1998-2003 Internet Software Consortium.
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * Permission to use, copy, modify, and distribute this software for any
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * purpose with or without fee is hereby granted, provided that the above
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * copyright notice and this permission notice appear in all copies.
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * PERFORMANCE OF THIS SOFTWARE.
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews/* $Id: time.c,v 1.25 2004/03/05 05:09:25 marka Exp $ */
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews#include <isc/string.h> /* Required for HP/UX (and others?) */
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrewsstatic int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrewsdns_time64_totext(isc_int64_t t, isc_buffer_t *target) {
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews unsigned int l;
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews#define is_leap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews#define year_secs(y) ((is_leap(y) ? 366 : 365 ) * 86400)
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews#define month_secs(m,y) ((days[m] + ((m == 1 && is_leap(y)) ? 1 : 0 )) * 86400)
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews while ((secs = year_secs(tm.tm_year + 1900)) <= t) {
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews while ((secs = month_secs(tm.tm_mon, tm.tm_year + 1900)) <= t) {
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews while (86400 <= t) {
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews while (3600 <= t) {
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews while (60 <= t) {
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews /* yyyy mm dd HH MM SS */
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews snprintf(buf, sizeof(buf), "%04d%02d%02d%02d%02d%02d",
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrewsdns_time32_totext(isc_uint32_t value, isc_buffer_t *target) {
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * Adjust the time to the closest epoch. This should be changed
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * to use a 64-bit counterpart to isc_stdtime_get() if one ever
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews * is defined, but even the current code is good until the year
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrewsdns_time64_fromtext(const char *source, isc_int64_t *target) {
return (DNS_R_SYNTAX);
return (DNS_R_SYNTAX);
return (ISC_R_SUCCESS);
return (result);
return (ISC_R_SUCCESS);