|
|
1.1 ! root 1: /* time.c ! 2: Routines to deal with UUCP time spans. ! 3: ! 4: Copyright (C) 1991, 1992 Ian Lance Taylor ! 5: ! 6: This file is part of the Taylor UUCP package. ! 7: ! 8: This program is free software; you can redistribute it and/or ! 9: modify it under the terms of the GNU General Public License as ! 10: published by the Free Software Foundation; either version 2 of the ! 11: License, or (at your option) any later version. ! 12: ! 13: This program is distributed in the hope that it will be useful, but ! 14: WITHOUT ANY WARRANTY; without even the implied warranty of ! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! 16: General Public License for more details. ! 17: ! 18: You should have received a copy of the GNU General Public License ! 19: along with this program; if not, write to the Free Software ! 20: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ! 21: ! 22: The author of the program may be contacted at [email protected] or ! 23: c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254. ! 24: */ ! 25: ! 26: #include "uucp.h" ! 27: ! 28: #if USE_RCS_ID ! 29: const char time_rcsid[] = "$Id: time.c,v 1.1 93/07/30 07:54:18 bin Exp Locker: bin $"; ! 30: #endif ! 31: ! 32: #include <ctype.h> ! 33: ! 34: #if HAVE_TIME_H ! 35: #include <time.h> ! 36: #endif ! 37: ! 38: #include "uudefs.h" ! 39: #include "uuconf.h" ! 40: ! 41: /* External functions. */ ! 42: #ifndef time ! 43: extern time_t time (); ! 44: #endif ! 45: #ifndef localtime ! 46: extern struct tm *localtime (); ! 47: #endif ! 48: ! 49: /* See if the current time matches a time span. If it does, return ! 50: TRUE, set *pival to the value for the matching span, and set ! 51: *pcretry to the retry for the matching span. Otherwise return ! 52: FALSE. */ ! 53: ! 54: boolean ! 55: ftimespan_match (qspan, pival, pcretry) ! 56: const struct uuconf_timespan *qspan; ! 57: long *pival; ! 58: int *pcretry; ! 59: { ! 60: time_t inow; ! 61: struct tm *qtm; ! 62: int itm; ! 63: const struct uuconf_timespan *q; ! 64: ! 65: if (qspan == NULL) ! 66: return FALSE; ! 67: ! 68: time (&inow); ! 69: qtm = localtime (&inow); ! 70: ! 71: /* Get the number of minutes since Sunday for the time. */ ! 72: itm = qtm->tm_wday * 24 * 60 + qtm->tm_hour * 60 + qtm->tm_min; ! 73: ! 74: for (q = qspan; q != NULL; q = q->uuconf_qnext) ! 75: { ! 76: if (q->uuconf_istart <= itm && itm <= q->uuconf_iend) ! 77: { ! 78: if (pival != NULL) ! 79: *pival = q->uuconf_ival; ! 80: if (pcretry != NULL) ! 81: *pcretry = q->uuconf_cretry; ! 82: return TRUE; ! 83: } ! 84: } ! 85: ! 86: return FALSE; ! 87: } ! 88: ! 89: /* Determine the maximum size that may ever be transferred, according ! 90: to a timesize span. This returns -1 if there is no limit. */ ! 91: ! 92: long ! 93: cmax_size_ever (qtimesize) ! 94: const struct uuconf_timespan *qtimesize; ! 95: { ! 96: long imax; ! 97: const struct uuconf_timespan *q; ! 98: ! 99: if (qtimesize == NULL) ! 100: return -1; ! 101: ! 102: /* Look through the list of spans. If there is any gap larger than ! 103: 1 hour, we assume there are no restrictions. Otherwise we keep ! 104: track of the largest value we see. I picked 1 hour arbitrarily, ! 105: on the theory that a 1 hour span to transfer large files might ! 106: actually occur, and is probably not an accident. */ ! 107: if (qtimesize->uuconf_istart >= 60) ! 108: return -1; ! 109: ! 110: imax = -1; ! 111: ! 112: for (q = qtimesize; q != NULL; q = q->uuconf_qnext) ! 113: { ! 114: if (q->uuconf_qnext == NULL) ! 115: { ! 116: if (q->uuconf_iend <= 6 * 24 * 60 + 23 * 60) ! 117: return -1; ! 118: } ! 119: else ! 120: { ! 121: if (q->uuconf_iend + 60 <= q->uuconf_qnext->uuconf_istart) ! 122: return -1; ! 123: } ! 124: ! 125: if (imax < q->uuconf_ival) ! 126: imax = q->uuconf_ival; ! 127: } ! 128: ! 129: return imax; ! 130: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.