ttl.c revision 15a44745412679c30a6d022733925af70a38b715
99bbb58ce7c172798fecb21d2d12756c159cff14Tinderbox User * Copyright (C) 1999, 2000 Internet Software Consortium.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Permission to use, copy, modify, and distribute this software for any
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * purpose with or without fee is hereby granted, provided that the above
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * copyright notice and this permission notice appear in all copies.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt/* $Id: ttl.c,v 1.19 2000/07/27 09:46:45 tale Exp $ */
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt#define RETERR(x) do { \
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt return (_r); \
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntstatic isc_result_t bind_ttl(isc_textregion_t *source, isc_uint32_t *ttl);
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * Helper for dns_ttl_totext().
75e5062bc524bbd1067cd42d5725e8bbe9f2134aMark Andrewsttlfmt(unsigned int t, const char *s, isc_boolean_t verbose,
699f790c49d03a9ef3c3234a72d272bb469203e8Evan Hunt len = snprintf(tmp, sizeof(tmp), "%u%c", t, s[0]);
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * Derived from bind8 ns_format_ttl().
699f790c49d03a9ef3c3234a72d272bb469203e8Evan Huntdns_ttl_totext(isc_uint32_t src, isc_boolean_t verbose, isc_buffer_t *target) {
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt RETERR(ttlfmt(weeks, "week", verbose, ISC_TF(x > 0), target));
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt RETERR(ttlfmt(days, "day", verbose, ISC_TF(x > 0), target));
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt RETERR(ttlfmt(hours, "hour", verbose, ISC_TF(x > 0), target));
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt RETERR(ttlfmt(mins, "minute", verbose, ISC_TF(x > 0), target));
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt (weeks == 0 && days == 0 && hours == 0 && mins == 0)) {
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt RETERR(ttlfmt(secs, "second", verbose, ISC_TF(x > 0), target));
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * If only a single unit letter is printed, print it
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * in upper case. (Why? Because BIND 8 does that.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * Presumably it has a reason.)
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * The unit letter is the last character in the
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * used region of the buffer.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * toupper() does not need its argument to be masked of cast
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * here because region.base is type unsigned char *.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntdns_counter_fromtext(isc_textregion_t *source, isc_uint32_t *ttl) {
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntdns_ttl_fromtext(isc_textregion_t *source, isc_uint32_t *ttl) {
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntbind_ttl(isc_textregion_t *source, isc_uint32_t *ttl) {
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt unsigned long n;
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt char *e, *s;
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * Copy the buffer as it may not be NULL terminated.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * No legal counter / ttl is longer that 63 characters.
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt switch (*e) {
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt /* Plain number? */
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt } while (*s != 0);