Lines Matching +full:current +full:- +full:rotate

1 /*-
2 * ------+---------+---------+---------+---------+---------+---------+---------*
8 * Copyright (c) 2003 - Garance Alistair Drosehn <gad@FreeBSD.org>.
36 * ------+---------+---------+---------+---------+---------+---------+---------*
37 * This is intended to be a set of general-purpose routines to process times.
40 * ------+---------+---------+---------+---------+---------+---------+---------*
56 * Bit-values which indicate which components of time were specified
58 * calculate what time-in-the-future will match that string.
67 #define TNYET_ADJ4DST -10 /* DST has "not yet" been adjusted */
98 * We are usually called with a 'tm-year' value in days_pmonth()
118 /*-
124 * are defaulted to the current date but time zero.
135 return (-1); in parse8601()
142 tm = ptime->tm; in parse8601()
143 ptime->tmspec = TSPEC_HOUROFDAY; in parse8601()
144 switch (t - s) { in parse8601()
146 tm.tm_year = ((l / 1000000) - 19) * 100; in parse8601()
150 ptime->tmspec |= TSPEC_YEAR; in parse8601()
151 tm.tm_year -= tm.tm_year % 100; in parse8601()
156 ptime->tmspec |= TSPEC_MONTHOFYEAR; in parse8601()
157 tm.tm_mon = (l / 100) - 1; in parse8601()
161 ptime->tmspec |= TSPEC_DAYOFMONTH; in parse8601()
167 return (-1); in parse8601()
173 return (-1); in parse8601()
179 return (-1); in parse8601()
181 switch (t - s) { in parse8601()
191 ptime->tmspec |= TSPEC_HOUROFDAY; in parse8601()
197 return (-1); in parse8601()
203 return (-1); in parse8601()
206 ptime->tm = tm; in parse8601()
210 /*-
215 * to rotate a logfile cyclic at
217 * - every day (D) within a specific hour (hh) (hh = 0...23)
218 * - once a week (W) at a specific day (d) OR (d = 0..6, 0 = Sunday)
219 * - once a month (M) at a specific day (d) (d = 1..31,l|L)
222 * are defaulted to the current date but time zero.
234 tm = ptime->tm; in parseDWM()
238 ptime->tmspec = TSPEC_HOUROFDAY; in parseDWM()
244 return (-1); in parseDWM()
246 ptime->tmspec |= TSPEC_HOUROFDAY; in parseDWM()
250 return (-1); in parseDWM()
257 return (-1); in parseDWM()
259 ptime->tmspec |= TSPEC_DAYOFWEEK; in parseDWM()
263 return (-1); in parseDWM()
269 save = 6 - tm.tm_wday; in parseDWM()
272 save = l - tm.tm_wday; in parseDWM()
279 tm.tm_mday = tm.tm_mday - daysmon; in parseDWM()
290 return (-1); in parseDWM()
292 ptime->tmspec |= TSPEC_DAYOFMONTH; in parseDWM()
296 ptime->tmspec |= TSPEC_LDAYOFMONTH; in parseDWM()
302 return (-1); in parseDWM()
305 return (-1); in parseDWM()
312 return (-1); in parseDWM()
317 return (-1); in parseDWM()
324 ptime->tm = tm; in parseDWM()
329 * Initialize a new ptime-related data area.
341 newdata->did_adj4dst = TNYET_ADJ4DST; in ptime_init()
357 return (-1); in ptime_adjust4dst()
367 (adjtime.did_adj4dst == dstsrc->tm.tm_isdst)) in ptime_adjust4dst()
370 /* See if daylight-saving has changed between the two times. */ in ptime_adjust4dst()
371 if (dstsrc->tm.tm_isdst != adjtime.tm.tm_isdst) { in ptime_adjust4dst()
373 adjtime.tsecs -= SECS_PER_HOUR; in ptime_adjust4dst()
378 adjtime.did_adj4dst = dstsrc->tm.tm_isdst; in ptime_adjust4dst()
380 * XXX - Should probably check to see if changing the in ptime_adjust4dst()
397 ptime->parseopts = parseopts; in ptime_relparse()
398 ptime->basesecs = basetime; in ptime_relparse()
399 ptime->basetm = *(localtime(&ptime->basesecs)); in ptime_relparse()
400 ptime->tm = ptime->basetm; in ptime_relparse()
401 ptime->tm.tm_hour = ptime->tm.tm_min = ptime->tm.tm_sec = 0; in ptime_relparse()
405 * on the given string and parsing-options. Note that the in ptime_relparse()
413 ptime->tsecs = (time_t)pres; in ptime_relparse()
419 * "day-of-month" that does not exist in the selected month. in ptime_relparse()
424 dpm = days_pmonth(ptime->tm.tm_mon, ptime->tm.tm_year); in ptime_relparse()
426 (ptime->tmspec & TSPEC_DAYOFMONTH) && in ptime_relparse()
427 (ptime->tm.tm_mday> dpm)) { in ptime_relparse()
429 * ptime_nxtime() will want a ptime->tsecs value, in ptime_relparse()
431 * ptime->tm values. in ptime_relparse()
435 "\t-- dom fixed: %4d/%02d/%02d %02d:%02d (%02d)", in ptime_relparse()
436 ptime->tm.tm_year, ptime->tm.tm_mon, in ptime_relparse()
437 ptime->tm.tm_mday, ptime->tm.tm_hour, in ptime_relparse()
438 ptime->tm.tm_min, dpm); in ptime_relparse()
439 temp_tm = ptime->tm; in ptime_relparse()
440 ptime->tsecs = mktime(&temp_tm); in ptime_relparse()
441 if (ptime->tsecs > (time_t)-1) in ptime_relparse()
446 ptime->tm.tm_year, ptime->tm.tm_mon, in ptime_relparse()
447 ptime->tm.tm_mday, ptime->tm.tm_hour, in ptime_relparse()
448 ptime->tm.tm_min); in ptime_relparse()
456 ptime->tsecs = mktime(&ptime->tm); in ptime_relparse()
457 if (ptime->tsecs == (time_t)-1) { in ptime_relparse()
458 ptime->tsecs = (time_t)-2; in ptime_relparse()
459 return (-2); in ptime_relparse()
470 return (-1); in ptime_free()
487 return (ctime(&ptime->tsecs)); in ptimeget_ctime()
501 static const char NILVALUE[] = {"-"}; /* RFC5424 specified NILVALUE */ in ptimeget_ctime_rfc5424()
522 if (ptime == NULL || localtime_r(&(ptime->tsecs), &tm) == NULL) { in ptimeget_ctime_rfc5424()
533 tz_sign = '-'; in ptimeget_ctime_rfc5424()
534 tz_offset = -tm.tm_gmtoff; in ptimeget_ctime_rfc5424()
544 "%04d-%02d-%02d" /* date */ in ptimeget_ctime_rfc5424()
564 /* Just like difftime(), we have no good error-return */ in ptimeget_diff()
568 return (difftime(minuend->tsecs, subtrahend->tsecs)); in ptimeget_diff()
576 return (-1); in ptimeget_secs()
578 return (ptime->tsecs); in ptimeget_secs()
584 * ptime_relparse(). The result may be -1 if there is no obvious
594 return (-1); in ptimeset_nxtime()
605 if (ptime->tmspec & TSPEC_YEAR) in ptimeset_nxtime()
606 return (-1); in ptimeset_nxtime()
610 * time is needed to go from that valid rotate time to the in ptimeset_nxtime()
611 * next valid rotate time. We only need to get to the nearest in ptimeset_nxtime()
615 if (ptime->tmspec & TSPEC_MONTHOFYEAR) { in ptimeset_nxtime()
617 if (ptime->tm.tm_mon == 1 && ptime->tm.tm_mday == 29) { in ptimeset_nxtime()
624 nextmatch.tm.tm_isdst = -1; in ptimeset_nxtime()
627 } else if (ptime->tmspec & TSPEC_LDAYOFMONTH) { in ptimeset_nxtime()
633 if (ptime->tm.tm_mon < 11) in ptimeset_nxtime()
634 moredays = days_pmonth(ptime->tm.tm_mon + 1, in ptimeset_nxtime()
635 ptime->tm.tm_year); in ptimeset_nxtime()
637 moredays = days_pmonth(0, ptime->tm.tm_year + 1); in ptimeset_nxtime()
639 } else if (ptime->tmspec & TSPEC_DAYOFMONTH) { in ptimeset_nxtime()
641 moredays = days_pmonth(ptime->tm.tm_mon, ptime->tm.tm_year); in ptimeset_nxtime()
644 * desired day-of-the-month. If that happens, then in ptimeset_nxtime()
647 tmon = ptime->tm.tm_mon; in ptimeset_nxtime()
648 tyear = ptime->tm.tm_year; in ptimeset_nxtime()
657 if (tdpm >= ptime->tm.tm_mday) in ptimeset_nxtime()
662 } else if (ptime->tmspec & TSPEC_DAYOFWEEK) { in ptimeset_nxtime()
664 } else if (ptime->tmspec & TSPEC_HOUROFDAY) { in ptimeset_nxtime()
675 * daylight-saving has changed between the two times. in ptimeset_nxtime()
689 return (-1); in ptimeset_time()
691 ptime->tsecs = secs; in ptimeset_time()
692 ptime->tm = *(localtime(&ptime->tsecs)); in ptimeset_time()
693 ptime->parseopts = 0; in ptimeset_time()
694 /* ptime->tmspec = ? */ in ptimeset_time()