File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / sntp / libopts / time.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 7 months ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    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>