Annotation of embedaddon/ntp/sntp/libopts/time.c, revision 1.1.1.1

1.1       misho       1: 
                      2: /**
                      3:  * \file time.c
                      4:  *
                      5:  *  Time-stamp:      "2011-03-06 11:52:23 bkorb"
                      6:  *
                      7:  *  This file is part of AutoOpts, a companion to AutoGen.
                      8:  *  AutoOpts is free software.
                      9:  *  AutoOpts is Copyright (c) 1992-2011 by Bruce Korb - all rights reserved
                     10:  *
                     11:  *  AutoOpts is available under any one of two licenses.  The license
                     12:  *  in use must be one of these two and the choice is under the control
                     13:  *  of the user of the license.
                     14:  *
                     15:  *   The GNU Lesser General Public License, version 3 or later
                     16:  *      See the files "COPYING.lgplv3" and "COPYING.gplv3"
                     17:  *
                     18:  *   The Modified Berkeley Software Distribution License
                     19:  *      See the file "COPYING.mbsd"
                     20:  *
                     21:  *  These files have the following md5sums:
                     22:  *
                     23:  *  43b91e8ca915626ed3818ffb1b71248b pkg/libopts/COPYING.gplv3
                     24:  *  06a1a2e4760c90ea5e1dad8dfaac4d39 pkg/libopts/COPYING.lgplv3
                     25:  *  66a5cedaf62c4b2637025f049f9b826f pkg/libopts/COPYING.mbsd
                     26:  */
                     27: 
                     28: /*=export_func  optionTimeVal
                     29:  * private:
                     30:  *
                     31:  * what:  process an option with a time duration.
                     32:  * arg:   + tOptions* + pOpts    + program options descriptor +
                     33:  * arg:   + tOptDesc* + pOptDesc + the descriptor for this arg +
                     34:  *
                     35:  * doc:
                     36:  *  Decipher a time duration value.
                     37: =*/
                     38: void
                     39: optionTimeVal(tOptions * pOpts, tOptDesc * pOD)
                     40: {
                     41:     time_t val;
                     42: 
                     43:     if ((pOD->fOptState & OPTST_RESET) != 0)
                     44:         return;
                     45: 
                     46:     val = parse_duration(pOD->optArg.argString);
                     47:     if (val == BAD_TIME) {
                     48:         fprintf(stderr, zNotDuration, pOpts->pzProgName, pOD->optArg.argString);
                     49:         if ((pOpts->fOptSet & OPTPROC_ERRSTOP) != 0)
                     50:             (*(pOpts->pUsageProc))(pOpts, EXIT_FAILURE);
                     51:     }
                     52: 
                     53:     if (pOD->fOptState & OPTST_ALLOC_ARG) {
                     54:         AGFREE(pOD->optArg.argString);
                     55:         pOD->fOptState &= ~OPTST_ALLOC_ARG;
                     56:     }
                     57: 
                     58:     pOD->optArg.argInt = val;
                     59: }
                     60: 
                     61: /*=export_func  optionTimeDate
                     62:  * private:
                     63:  *
                     64:  * what:  process an option with a time and date.
                     65:  * arg:   + tOptions* + pOpts    + program options descriptor +
                     66:  * arg:   + tOptDesc* + pOptDesc + the descriptor for this arg +
                     67:  *
                     68:  * doc:
                     69:  *  Decipher a time and date value.
                     70: =*/
                     71: void
                     72: optionTimeDate(tOptions * pOpts, tOptDesc * pOD)
                     73: {
                     74: #if defined(HAVE_GETDATE_R) && defined(HAVE_PUTENV)
                     75:     if ((! HAS_pzPkgDataDir(pOpts)) || (pOpts->pzPkgDataDir == NULL))
                     76:         goto default_action;
                     77: 
                     78:     /*
                     79:      *  Export the DATEMSK environment variable.  getdate_r() uses it to
                     80:      *  find the file with the strptime formats.  If we cannot find the file
                     81:      *  we need ($PKGDATADIR/datemsk), then fall back to just a time duration.
                     82:      */
                     83:     {
                     84:         static char * envptr = NULL;
                     85: 
                     86:         if (envptr == NULL) {
                     87:             static char const fmt[] = "DATEMSK=%s/datemsk";
                     88:             envptr = AGALOC(sizeof(fmt) + strlen(pOpts->pzPkgDataDir), fmt);
                     89:             sprintf(envptr, fmt, pOpts->pzPkgDataDir);
                     90: 
                     91:             putenv(envptr);
                     92:         }
                     93: 
                     94:         if (access(envptr+8, R_OK) != 0)
                     95:             goto default_action;
                     96:     }
                     97: 
                     98:     /*
                     99:      *  Convert the date to a time since the epoch and stash it in a long int.
                    100:      */
                    101:     {
                    102:         struct tm stm;
                    103:         time_t tm;
                    104: 
                    105:         if (getdate_r(pOD->optArg.argString, &stm) != 0) {
                    106:             fprintf(stderr, zNotDate, pOpts->pzProgName,
                    107:                     pOD->optArg.argString);
                    108:             if ((pOpts->fOptSet & OPTPROC_ERRSTOP) != 0)
                    109:                 (*(pOpts->pUsageProc))(pOpts, EXIT_FAILURE);
                    110:             return;
                    111:         }
                    112: 
                    113:         tm = mktime(&stm);
                    114: 
                    115:         if (pOD->fOptState & OPTST_ALLOC_ARG) {
                    116:             AGFREE(pOD->optArg.argString);
                    117:             pOD->fOptState &= ~OPTST_ALLOC_ARG;
                    118:         }
                    119: 
                    120:         pOD->optArg.argInt = tm;
                    121:     }
                    122:     return;
                    123: 
                    124: default_action:
                    125: 
                    126: #endif
                    127:     optionTimeVal(pOpts, pOD);
                    128:     if (pOD->optArg.argInt != BAD_TIME)
                    129:         pOD->optArg.argInt += (unsigned long)time(NULL);
                    130: }
                    131: /*
                    132:  * Local Variables:
                    133:  * mode: C
                    134:  * c-file-style: "stroustrup"
                    135:  * indent-tabs-mode: nil
                    136:  * End:
                    137:  * end of autoopts/time.c */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>