Annotation of 43BSDReno/usr.sbin/sendmail/src/convtime.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1983 Eric P. Allman
                      3:  * Copyright (c) 1988 Regents of the University of California.
                      4:  * All rights reserved.
                      5:  *
                      6:  * Redistribution and use in source and binary forms are permitted provided
                      7:  * that: (1) source distributions retain this entire copyright notice and
                      8:  * comment, and (2) distributions including binaries display the following
                      9:  * acknowledgement:  ``This product includes software developed by the
                     10:  * University of California, Berkeley and its contributors'' in the
                     11:  * documentation or other materials provided with the distribution and in
                     12:  * all advertising materials mentioning features or use of this software.
                     13:  * Neither the name of the University nor the names of its contributors may
                     14:  * be used to endorse or promote products derived from this software without
                     15:  * specific prior written permission.
                     16:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
                     17:  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
                     18:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     19:  */
                     20: 
                     21: #ifndef lint
                     22: static char sccsid[] = "@(#)convtime.c 5.4 (Berkeley) 6/1/90";
                     23: #endif /* not lint */
                     24: 
                     25: # include <ctype.h>
                     26: # include "useful.h"
                     27: 
                     28: /*
                     29: **  CONVTIME -- convert time
                     30: **
                     31: **     Takes a time as an ascii string with a trailing character
                     32: **     giving units:
                     33: **       s -- seconds
                     34: **       m -- minutes
                     35: **       h -- hours
                     36: **       d -- days (default)
                     37: **       w -- weeks
                     38: **     For example, "3d12h" is three and a half days.
                     39: **
                     40: **     Parameters:
                     41: **             p -- pointer to ascii time.
                     42: **
                     43: **     Returns:
                     44: **             time in seconds.
                     45: **
                     46: **     Side Effects:
                     47: **             none.
                     48: */
                     49: 
                     50: time_t
                     51: convtime(p)
                     52:        char *p;
                     53: {
                     54:        register time_t t, r;
                     55:        register char c;
                     56: 
                     57:        r = 0;
                     58:        while (*p != '\0')
                     59:        {
                     60:                t = 0;
                     61:                while (isdigit(c = *p++))
                     62:                        t = t * 10 + (c - '0');
                     63:                if (c == '\0')
                     64:                        p--;
                     65:                switch (c)
                     66:                {
                     67:                  case 'w':             /* weeks */
                     68:                        t *= 7;
                     69: 
                     70:                  case 'd':             /* days */
                     71:                  default:
                     72:                        t *= 24;
                     73: 
                     74:                  case 'h':             /* hours */
                     75:                        t *= 60;
                     76: 
                     77:                  case 'm':             /* minutes */
                     78:                        t *= 60;
                     79: 
                     80:                  case 's':             /* seconds */
                     81:                        break;
                     82:                }
                     83:                r += t;
                     84:        }
                     85: 
                     86:        return (r);
                     87: }
                     88: /*
                     89: **  PINTVL -- produce printable version of a time interval
                     90: **
                     91: **     Parameters:
                     92: **             intvl -- the interval to be converted
                     93: **             brief -- if TRUE, print this in an extremely compact form
                     94: **                     (basically used for logging).
                     95: **
                     96: **     Returns:
                     97: **             A pointer to a string version of intvl suitable for
                     98: **                     printing or framing.
                     99: **
                    100: **     Side Effects:
                    101: **             none.
                    102: **
                    103: **     Warning:
                    104: **             The string returned is in a static buffer.
                    105: */
                    106: 
                    107: # define PLURAL(n)     ((n) == 1 ? "" : "s")
                    108: 
                    109: char *
                    110: pintvl(intvl, brief)
                    111:        time_t intvl;
                    112:        bool brief;
                    113: {
                    114:        static char buf[256];
                    115:        register char *p;
                    116:        int wk, dy, hr, mi, se;
                    117: 
                    118:        if (intvl == 0 && !brief)
                    119:                return ("zero seconds");
                    120: 
                    121:        /* decode the interval into weeks, days, hours, minutes, seconds */
                    122:        se = intvl % 60;
                    123:        intvl /= 60;
                    124:        mi = intvl % 60;
                    125:        intvl /= 60;
                    126:        hr = intvl % 24;
                    127:        intvl /= 24;
                    128:        if (brief)
                    129:                dy = intvl;
                    130:        else
                    131:        {
                    132:                dy = intvl % 7;
                    133:                intvl /= 7;
                    134:                wk = intvl;
                    135:        }
                    136: 
                    137:        /* now turn it into a sexy form */
                    138:        p = buf;
                    139:        if (brief)
                    140:        {
                    141:                if (dy > 0)
                    142:                {
                    143:                        (void) sprintf(p, "%d+", dy);
                    144:                        p += strlen(p);
                    145:                }
                    146:                (void) sprintf(p, "%02d:%02d:%02d", hr, mi, se);
                    147:                return (buf);
                    148:        }
                    149: 
                    150:        /* use the verbose form */
                    151:        if (wk > 0)
                    152:        {
                    153:                (void) sprintf(p, ", %d week%s", wk, PLURAL(wk));
                    154:                p += strlen(p);
                    155:        }
                    156:        if (dy > 0)
                    157:        {
                    158:                (void) sprintf(p, ", %d day%s", dy, PLURAL(dy));
                    159:                p += strlen(p);
                    160:        }
                    161:        if (hr > 0)
                    162:        {
                    163:                (void) sprintf(p, ", %d hour%s", hr, PLURAL(hr));
                    164:                p += strlen(p);
                    165:        }
                    166:        if (mi > 0)
                    167:        {
                    168:                (void) sprintf(p, ", %d minute%s", mi, PLURAL(mi));
                    169:                p += strlen(p);
                    170:        }
                    171:        if (se > 0)
                    172:        {
                    173:                (void) sprintf(p, ", %d second%s", se, PLURAL(se));
                    174:                p += strlen(p);
                    175:        }
                    176: 
                    177:        return (buf + 2);
                    178: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.