diff options
Diffstat (limited to 'contrib/tzcode')
-rw-r--r-- | contrib/tzcode/stdtime/Makefile.inc | 18 | ||||
-rw-r--r-- | contrib/tzcode/stdtime/Symbol.map | 35 | ||||
-rw-r--r-- | contrib/tzcode/stdtime/strftime.3 | 278 | ||||
-rw-r--r-- | contrib/tzcode/stdtime/strftime.c | 634 | ||||
-rw-r--r-- | contrib/tzcode/stdtime/strptime.3 | 173 | ||||
-rw-r--r-- | contrib/tzcode/stdtime/strptime.c | 566 | ||||
-rw-r--r-- | contrib/tzcode/stdtime/time32.c | 100 | ||||
-rw-r--r-- | contrib/tzcode/stdtime/timelocal.c | 117 | ||||
-rw-r--r-- | contrib/tzcode/stdtime/timelocal.h | 55 |
9 files changed, 0 insertions, 1976 deletions
diff --git a/contrib/tzcode/stdtime/Makefile.inc b/contrib/tzcode/stdtime/Makefile.inc deleted file mode 100644 index a58a8a2..0000000 --- a/contrib/tzcode/stdtime/Makefile.inc +++ /dev/null @@ -1,18 +0,0 @@ -# Makefile.inc,v 1.2 1994/09/13 21:26:01 wollman Exp -# $FreeBSD$ - -.PATH: ${.CURDIR}/stdtime ${.CURDIR}/../locale - -SRCS+= asctime.c difftime.c localtime.c strftime.c strptime.c timelocal.c \ - time32.c - -SYM_MAPS+= ${.CURDIR}/stdtime/Symbol.map - -MAN+= ctime.3 strftime.3 strptime.3 time2posix.3 -MAN+= tzfile.5 - -MLINKS+=ctime.3 asctime.3 ctime.3 difftime.3 ctime.3 gmtime.3 \ - ctime.3 localtime.3 ctime.3 mktime.3 ctime.3 timegm.3 \ - ctime.3 ctime_r.3 ctime.3 localtime_r.3 ctime.3 gmtime_r.3 \ - ctime.3 asctime_r.3 -MLINKS+=time2posix.3 posix2time.3 diff --git a/contrib/tzcode/stdtime/Symbol.map b/contrib/tzcode/stdtime/Symbol.map deleted file mode 100644 index 3bee3735..0000000 --- a/contrib/tzcode/stdtime/Symbol.map +++ /dev/null @@ -1,35 +0,0 @@ -/* - * $FreeBSD$ - */ - -FBSD_1.0 { - _time32_to_time; - _time_to_time32; - _time64_to_time; - _time_to_time64; - _time_to_long; - _long_to_time; - _time_to_int; - _int_to_time; - strptime; - strftime; - tzname; - tzsetwall; - tzset; - localtime; - localtime_r; - gmtime; - gmtime_r; - offtime; - ctime; - ctime_r; - mktime; - timelocal; - timegm; - timeoff; - time2posix; - posix2time; - difftime; - asctime_r; - asctime; -}; diff --git a/contrib/tzcode/stdtime/strftime.3 b/contrib/tzcode/stdtime/strftime.3 deleted file mode 100644 index d5cdd7d..0000000 --- a/contrib/tzcode/stdtime/strftime.3 +++ /dev/null @@ -1,278 +0,0 @@ -.\" Copyright (c) 1989, 1991, 1993 -.\" The Regents of the University of California. All rights reserved. -.\" -.\" This code is derived from software contributed to Berkeley by -.\" the American National Standards Committee X3, on Information -.\" Processing Systems. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 4. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" @(#)strftime.3 8.1 (Berkeley) 6/4/93 -.\" $FreeBSD$ -.\" -.Dd November 4, 2004 -.Dt STRFTIME 3 -.Os -.Sh NAME -.Nm strftime -.Nd format date and time -.Sh LIBRARY -.Lb libc -.Sh SYNOPSIS -.In time.h -.Ft size_t -.Fo strftime -.Fa "char * restrict buf" -.Fa "size_t maxsize" -.Fa "const char * restrict format" -.Fa "const struct tm * restrict timeptr" -.Fc -.Sh DESCRIPTION -The -.Fn strftime -function formats the information from -.Fa timeptr -into the buffer -.Fa buf -according to the string pointed to by -.Fa format . -.Pp -The -.Fa format -string consists of zero or more conversion specifications and -ordinary characters. -All ordinary characters are copied directly into the buffer. -A conversion specification consists of a percent sign -.Dq Ql % -and one other character. -.Pp -No more than -.Fa maxsize -characters will be placed into the array. -If the total number of resulting characters, including the terminating -NUL character, is not more than -.Fa maxsize , -.Fn strftime -returns the number of characters in the array, not counting the -terminating NUL. -Otherwise, zero is returned and the buffer contents are indeterminate. -.Pp -The conversion specifications are copied to the buffer after expansion -as follows:- -.Bl -tag -width "xxxx" -.It Cm \&%A -is replaced by national representation of the full weekday name. -.It Cm %a -is replaced by national representation of -the abbreviated weekday name. -.It Cm \&%B -is replaced by national representation of the full month name. -.It Cm %b -is replaced by national representation of -the abbreviated month name. -.It Cm \&%C -is replaced by (year / 100) as decimal number; single -digits are preceded by a zero. -.It Cm %c -is replaced by national representation of time and date. -.It Cm \&%D -is equivalent to -.Dq Li %m/%d/%y . -.It Cm %d -is replaced by the day of the month as a decimal number (01-31). -.It Cm %E* %O* -POSIX locale extensions. -The sequences -%Ec %EC %Ex %EX %Ey %EY -%Od %Oe %OH %OI %Om %OM -%OS %Ou %OU %OV %Ow %OW %Oy -are supposed to provide alternate -representations. -.Pp -Additionally %OB implemented -to represent alternative months names -(used standalone, without day mentioned). -.It Cm %e -is replaced by the day of the month as a decimal number (1-31); single -digits are preceded by a blank. -.It Cm \&%F -is equivalent to -.Dq Li %Y-%m-%d . -.It Cm \&%G -is replaced by a year as a decimal number with century. -This year is the one that contains the greater part of -the week (Monday as the first day of the week). -.It Cm %g -is replaced by the same year as in -.Dq Li %G , -but as a decimal number without century (00-99). -.It Cm \&%H -is replaced by the hour (24-hour clock) as a decimal number (00-23). -.It Cm %h -the same as -.Cm %b . -.It Cm \&%I -is replaced by the hour (12-hour clock) as a decimal number (01-12). -.It Cm %j -is replaced by the day of the year as a decimal number (001-366). -.It Cm %k -is replaced by the hour (24-hour clock) as a decimal number (0-23); -single digits are preceded by a blank. -.It Cm %l -is replaced by the hour (12-hour clock) as a decimal number (1-12); -single digits are preceded by a blank. -.It Cm \&%M -is replaced by the minute as a decimal number (00-59). -.It Cm %m -is replaced by the month as a decimal number (01-12). -.It Cm %n -is replaced by a newline. -.It Cm %O* -the same as -.Cm %E* . -.It Cm %p -is replaced by national representation of either -"ante meridiem" (a.m.) -or -"post meridiem" (p.m.) -as appropriate. -.It Cm \&%R -is equivalent to -.Dq Li %H:%M . -.It Cm %r -is equivalent to -.Dq Li %I:%M:%S %p . -.It Cm \&%S -is replaced by the second as a decimal number (00-60). -.It Cm %s -is replaced by the number of seconds since the Epoch, UTC (see -.Xr mktime 3 ) . -.It Cm \&%T -is equivalent to -.Dq Li %H:%M:%S . -.It Cm %t -is replaced by a tab. -.It Cm \&%U -is replaced by the week number of the year (Sunday as the first day of -the week) as a decimal number (00-53). -.It Cm %u -is replaced by the weekday (Monday as the first day of the week) -as a decimal number (1-7). -.It Cm \&%V -is replaced by the week number of the year (Monday as the first day of -the week) as a decimal number (01-53). -If the week containing January -1 has four or more days in the new year, then it is week 1; otherwise -it is the last week of the previous year, and the next week is week 1. -.It Cm %v -is equivalent to -.Dq Li %e-%b-%Y . -.It Cm \&%W -is replaced by the week number of the year (Monday as the first day of -the week) as a decimal number (00-53). -.It Cm %w -is replaced by the weekday (Sunday as the first day of the week) -as a decimal number (0-6). -.It Cm \&%X -is replaced by national representation of the time. -.It Cm %x -is replaced by national representation of the date. -.It Cm \&%Y -is replaced by the year with century as a decimal number. -.It Cm %y -is replaced by the year without century as a decimal number (00-99). -.It Cm \&%Z -is replaced by the time zone name. -.It Cm %z -is replaced by the time zone offset from UTC; a leading plus sign stands for -east of UTC, a minus sign for west of UTC, hours and minutes follow -with two digits each and no delimiter between them (common form for -RFC 822 date headers). -.It Cm %+ -is replaced by national representation of the date and time -(the format is similar to that produced by -.Xr date 1 ) . -.It Cm %-* -GNU libc extension. -Do not do any padding when performing numerical outputs. -.It Cm %_* -GNU libc extension. -Explicitly specify space for padding. -.It Cm %0* -GNU libc extension. -Explicitly specify zero for padding. -.It Cm %% -is replaced by -.Ql % . -.El -.Sh SEE ALSO -.Xr date 1 , -.Xr printf 1 , -.Xr ctime 3 , -.Xr printf 3 , -.Xr strptime 3 , -.Xr wcsftime 3 -.Sh STANDARDS -The -.Fn strftime -function -conforms to -.St -isoC -with a lot of extensions including -.Ql %C , -.Ql \&%D , -.Ql %E* , -.Ql %e , -.Ql %G , -.Ql %g , -.Ql %h , -.Ql %k , -.Ql %l , -.Ql %n , -.Ql %O* , -.Ql \&%R , -.Ql %r , -.Ql %s , -.Ql \&%T , -.Ql %t , -.Ql %u , -.Ql \&%V , -.Ql %z , -.Ql %+ . -.Pp -The peculiar week number and year in the replacements of -.Ql %G , -.Ql %g -and -.Ql \&%V -are defined in ISO 8601: 1988. -.Sh BUGS -There is no conversion specification for the phase of the moon. -.Pp -The -.Fn strftime -function does not correctly handle multibyte characters in the -.Fa format -argument. diff --git a/contrib/tzcode/stdtime/strftime.c b/contrib/tzcode/stdtime/strftime.c deleted file mode 100644 index dac910b..0000000 --- a/contrib/tzcode/stdtime/strftime.c +++ /dev/null @@ -1,634 +0,0 @@ -/* - * Copyright (c) 1989 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef lint -#ifndef NOID -static const char elsieid[] = "@(#)strftime.3 8.3"; -/* -** Based on the UCB version with the ID appearing below. -** This is ANSIish only when "multibyte character == plain character". -*/ -#endif /* !defined NOID */ -#endif /* !defined lint */ - -#include "namespace.h" -#include "private.h" - -#if defined(LIBC_SCCS) && !defined(lint) -static const char sccsid[] = "@(#)strftime.c 5.4 (Berkeley) 3/14/89"; -#endif /* LIBC_SCCS and not lint */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include "tzfile.h" -#include <fcntl.h> -#include <sys/stat.h> -#include "un-namespace.h" -#include "timelocal.h" - -static char * _add(const char *, char *, const char *); -static char * _conv(int, const char *, char *, const char *); -static char * _fmt(const char *, const struct tm *, char *, const char *, - int *); -static char * _yconv(int, int, int, int, char *, const char *); - -extern char * tzname[]; - -#ifndef YEAR_2000_NAME -#define YEAR_2000_NAME "CHECK_STRFTIME_FORMATS_FOR_TWO_DIGIT_YEARS" -#endif /* !defined YEAR_2000_NAME */ - -#define IN_NONE 0 -#define IN_SOME 1 -#define IN_THIS 2 -#define IN_ALL 3 - -#define PAD_DEFAULT 0 -#define PAD_LESS 1 -#define PAD_SPACE 2 -#define PAD_ZERO 3 - -static const char* fmt_padding[][4] = { - /* DEFAULT, LESS, SPACE, ZERO */ -#define PAD_FMT_MONTHDAY 0 -#define PAD_FMT_HMS 0 -#define PAD_FMT_CENTURY 0 -#define PAD_FMT_SHORTYEAR 0 -#define PAD_FMT_MONTH 0 -#define PAD_FMT_WEEKOFYEAR 0 -#define PAD_FMT_DAYOFMONTH 0 - { "%02d", "%d", "%2d", "%02d" }, -#define PAD_FMT_SDAYOFMONTH 1 -#define PAD_FMT_SHMS 1 - { "%2d", "%d", "%2d", "%02d" }, -#define PAD_FMT_DAYOFYEAR 2 - { "%03d", "%d", "%3d", "%03d" }, -#define PAD_FMT_YEAR 3 - { "%04d", "%d", "%4d", "%04d" } -}; - -size_t -strftime(char * __restrict s, size_t maxsize, const char * __restrict format, - const struct tm * __restrict t) -{ - char * p; - int warn; - - tzset(); - warn = IN_NONE; - p = _fmt(((format == NULL) ? "%c" : format), t, s, s + maxsize, &warn); -#ifndef NO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU - if (warn != IN_NONE && getenv(YEAR_2000_NAME) != NULL) { - (void) fprintf(stderr, "\n"); - if (format == NULL) - (void) fprintf(stderr, "NULL strftime format "); - else (void) fprintf(stderr, "strftime format \"%s\" ", - format); - (void) fprintf(stderr, "yields only two digits of years in "); - if (warn == IN_SOME) - (void) fprintf(stderr, "some locales"); - else if (warn == IN_THIS) - (void) fprintf(stderr, "the current locale"); - else (void) fprintf(stderr, "all locales"); - (void) fprintf(stderr, "\n"); - } -#endif /* !defined NO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU */ - if (p == s + maxsize) - return 0; - *p = '\0'; - return p - s; -} - -static char * -_fmt(format, t, pt, ptlim, warnp) -const char * format; -const struct tm * const t; -char * pt; -const char * const ptlim; -int * warnp; -{ - int Ealternative, Oalternative, PadIndex; - struct lc_time_T *tptr = __get_current_time_locale(); - - for ( ; *format; ++format) { - if (*format == '%') { - Ealternative = 0; - Oalternative = 0; - PadIndex = PAD_DEFAULT; -label: - switch (*++format) { - case '\0': - --format; - break; - case 'A': - pt = _add((t->tm_wday < 0 || - t->tm_wday >= DAYSPERWEEK) ? - "?" : tptr->weekday[t->tm_wday], - pt, ptlim); - continue; - case 'a': - pt = _add((t->tm_wday < 0 || - t->tm_wday >= DAYSPERWEEK) ? - "?" : tptr->wday[t->tm_wday], - pt, ptlim); - continue; - case 'B': - pt = _add((t->tm_mon < 0 || - t->tm_mon >= MONSPERYEAR) ? - "?" : (Oalternative ? tptr->alt_month : - tptr->month)[t->tm_mon], - pt, ptlim); - continue; - case 'b': - case 'h': - pt = _add((t->tm_mon < 0 || - t->tm_mon >= MONSPERYEAR) ? - "?" : tptr->mon[t->tm_mon], - pt, ptlim); - continue; - case 'C': - /* - ** %C used to do a... - ** _fmt("%a %b %e %X %Y", t); - ** ...whereas now POSIX 1003.2 calls for - ** something completely different. - ** (ado, 1993-05-24) - */ - pt = _yconv(t->tm_year, TM_YEAR_BASE, 1, 0, - pt, ptlim); - continue; - case 'c': - { - int warn2 = IN_SOME; - - pt = _fmt(tptr->c_fmt, t, pt, ptlim, &warn2); - if (warn2 == IN_ALL) - warn2 = IN_THIS; - if (warn2 > *warnp) - *warnp = warn2; - } - continue; - case 'D': - pt = _fmt("%m/%d/%y", t, pt, ptlim, warnp); - continue; - case 'd': - pt = _conv(t->tm_mday, fmt_padding[PAD_FMT_DAYOFMONTH][PadIndex], - pt, ptlim); - continue; - case 'E': - if (Ealternative || Oalternative) - break; - Ealternative++; - goto label; - case 'O': - /* - ** C99 locale modifiers. - ** The sequences - ** %Ec %EC %Ex %EX %Ey %EY - ** %Od %oe %OH %OI %Om %OM - ** %OS %Ou %OU %OV %Ow %OW %Oy - ** are supposed to provide alternate - ** representations. - ** - ** FreeBSD extension - ** %OB - */ - if (Ealternative || Oalternative) - break; - Oalternative++; - goto label; - case 'e': - pt = _conv(t->tm_mday, - fmt_padding[PAD_FMT_SDAYOFMONTH][PadIndex], pt, ptlim); - continue; - case 'F': - pt = _fmt("%Y-%m-%d", t, pt, ptlim, warnp); - continue; - case 'H': - pt = _conv(t->tm_hour, fmt_padding[PAD_FMT_HMS][PadIndex], - pt, ptlim); - continue; - case 'I': - pt = _conv((t->tm_hour % 12) ? - (t->tm_hour % 12) : 12, - fmt_padding[PAD_FMT_HMS][PadIndex], pt, ptlim); - continue; - case 'j': - pt = _conv(t->tm_yday + 1, - fmt_padding[PAD_FMT_DAYOFYEAR][PadIndex], pt, ptlim); - continue; - case 'k': - /* - ** This used to be... - ** _conv(t->tm_hour % 12 ? - ** t->tm_hour % 12 : 12, 2, ' '); - ** ...and has been changed to the below to - ** match SunOS 4.1.1 and Arnold Robbins' - ** strftime version 3.0. That is, "%k" and - ** "%l" have been swapped. - ** (ado, 1993-05-24) - */ - pt = _conv(t->tm_hour, fmt_padding[PAD_FMT_SHMS][PadIndex], - pt, ptlim); - continue; -#ifdef KITCHEN_SINK - case 'K': - /* - ** After all this time, still unclaimed! - */ - pt = _add("kitchen sink", pt, ptlim); - continue; -#endif /* defined KITCHEN_SINK */ - case 'l': - /* - ** This used to be... - ** _conv(t->tm_hour, 2, ' '); - ** ...and has been changed to the below to - ** match SunOS 4.1.1 and Arnold Robbin's - ** strftime version 3.0. That is, "%k" and - ** "%l" have been swapped. - ** (ado, 1993-05-24) - */ - pt = _conv((t->tm_hour % 12) ? - (t->tm_hour % 12) : 12, - fmt_padding[PAD_FMT_SHMS][PadIndex], pt, ptlim); - continue; - case 'M': - pt = _conv(t->tm_min, fmt_padding[PAD_FMT_HMS][PadIndex], - pt, ptlim); - continue; - case 'm': - pt = _conv(t->tm_mon + 1, - fmt_padding[PAD_FMT_MONTH][PadIndex], pt, ptlim); - continue; - case 'n': - pt = _add("\n", pt, ptlim); - continue; - case 'p': - pt = _add((t->tm_hour >= (HOURSPERDAY / 2)) ? - tptr->pm : - tptr->am, - pt, ptlim); - continue; - case 'R': - pt = _fmt("%H:%M", t, pt, ptlim, warnp); - continue; - case 'r': - pt = _fmt(tptr->ampm_fmt, t, pt, ptlim, - warnp); - continue; - case 'S': - pt = _conv(t->tm_sec, fmt_padding[PAD_FMT_HMS][PadIndex], - pt, ptlim); - continue; - case 's': - { - struct tm tm; - char buf[INT_STRLEN_MAXIMUM( - time_t) + 1]; - time_t mkt; - - tm = *t; - mkt = mktime(&tm); - if (TYPE_SIGNED(time_t)) - (void) sprintf(buf, "%ld", - (long) mkt); - else (void) sprintf(buf, "%lu", - (unsigned long) mkt); - pt = _add(buf, pt, ptlim); - } - continue; - case 'T': - pt = _fmt("%H:%M:%S", t, pt, ptlim, warnp); - continue; - case 't': - pt = _add("\t", pt, ptlim); - continue; - case 'U': - pt = _conv((t->tm_yday + DAYSPERWEEK - - t->tm_wday) / DAYSPERWEEK, - fmt_padding[PAD_FMT_WEEKOFYEAR][PadIndex], pt, ptlim); - continue; - case 'u': - /* - ** From Arnold Robbins' strftime version 3.0: - ** "ISO 8601: Weekday as a decimal number - ** [1 (Monday) - 7]" - ** (ado, 1993-05-24) - */ - pt = _conv((t->tm_wday == 0) ? - DAYSPERWEEK : t->tm_wday, - "%d", pt, ptlim); - continue; - case 'V': /* ISO 8601 week number */ - case 'G': /* ISO 8601 year (four digits) */ - case 'g': /* ISO 8601 year (two digits) */ -/* -** From Arnold Robbins' strftime version 3.0: "the week number of the -** year (the first Monday as the first day of week 1) as a decimal number -** (01-53)." -** (ado, 1993-05-24) -** -** From "http://www.ft.uni-erlangen.de/~mskuhn/iso-time.html" by Markus Kuhn: -** "Week 01 of a year is per definition the first week which has the -** Thursday in this year, which is equivalent to the week which contains -** the fourth day of January. In other words, the first week of a new year -** is the week which has the majority of its days in the new year. Week 01 -** might also contain days from the previous year and the week before week -** 01 of a year is the last week (52 or 53) of the previous year even if -** it contains days from the new year. A week starts with Monday (day 1) -** and ends with Sunday (day 7). For example, the first week of the year -** 1997 lasts from 1996-12-30 to 1997-01-05..." -** (ado, 1996-01-02) -*/ - { - int year; - int base; - int yday; - int wday; - int w; - - year = t->tm_year; - base = TM_YEAR_BASE; - yday = t->tm_yday; - wday = t->tm_wday; - for ( ; ; ) { - int len; - int bot; - int top; - - len = isleap_sum(year, base) ? - DAYSPERLYEAR : - DAYSPERNYEAR; - /* - ** What yday (-3 ... 3) does - ** the ISO year begin on? - */ - bot = ((yday + 11 - wday) % - DAYSPERWEEK) - 3; - /* - ** What yday does the NEXT - ** ISO year begin on? - */ - top = bot - - (len % DAYSPERWEEK); - if (top < -3) - top += DAYSPERWEEK; - top += len; - if (yday >= top) { - ++base; - w = 1; - break; - } - if (yday >= bot) { - w = 1 + ((yday - bot) / - DAYSPERWEEK); - break; - } - --base; - yday += isleap_sum(year, base) ? - DAYSPERLYEAR : - DAYSPERNYEAR; - } -#ifdef XPG4_1994_04_09 - if ((w == 52 && - t->tm_mon == TM_JANUARY) || - (w == 1 && - t->tm_mon == TM_DECEMBER)) - w = 53; -#endif /* defined XPG4_1994_04_09 */ - if (*format == 'V') - pt = _conv(w, fmt_padding[PAD_FMT_WEEKOFYEAR][PadIndex], - pt, ptlim); - else if (*format == 'g') { - *warnp = IN_ALL; - pt = _yconv(year, base, 0, 1, - pt, ptlim); - } else pt = _yconv(year, base, 1, 1, - pt, ptlim); - } - continue; - case 'v': - /* - ** From Arnold Robbins' strftime version 3.0: - ** "date as dd-bbb-YYYY" - ** (ado, 1993-05-24) - */ - pt = _fmt("%e-%b-%Y", t, pt, ptlim, warnp); - continue; - case 'W': - pt = _conv((t->tm_yday + DAYSPERWEEK - - (t->tm_wday ? - (t->tm_wday - 1) : - (DAYSPERWEEK - 1))) / DAYSPERWEEK, - fmt_padding[PAD_FMT_WEEKOFYEAR][PadIndex], pt, ptlim); - continue; - case 'w': - pt = _conv(t->tm_wday, "%d", pt, ptlim); - continue; - case 'X': - pt = _fmt(tptr->X_fmt, t, pt, ptlim, warnp); - continue; - case 'x': - { - int warn2 = IN_SOME; - - pt = _fmt(tptr->x_fmt, t, pt, ptlim, &warn2); - if (warn2 == IN_ALL) - warn2 = IN_THIS; - if (warn2 > *warnp) - *warnp = warn2; - } - continue; - case 'y': - *warnp = IN_ALL; - pt = _yconv(t->tm_year, TM_YEAR_BASE, 0, 1, - pt, ptlim); - continue; - case 'Y': - pt = _yconv(t->tm_year, TM_YEAR_BASE, 1, 1, - pt, ptlim); - continue; - case 'Z': -#ifdef TM_ZONE - if (t->TM_ZONE != NULL) - pt = _add(t->TM_ZONE, pt, ptlim); - else -#endif /* defined TM_ZONE */ - if (t->tm_isdst >= 0) - pt = _add(tzname[t->tm_isdst != 0], - pt, ptlim); - /* - ** C99 says that %Z must be replaced by the - ** empty string if the time zone is not - ** determinable. - */ - continue; - case 'z': - { - int diff; - char const * sign; - - if (t->tm_isdst < 0) - continue; -#ifdef TM_GMTOFF - diff = t->TM_GMTOFF; -#else /* !defined TM_GMTOFF */ - /* - ** C99 says that the UTC offset must - ** be computed by looking only at - ** tm_isdst. This requirement is - ** incorrect, since it means the code - ** must rely on magic (in this case - ** altzone and timezone), and the - ** magic might not have the correct - ** offset. Doing things correctly is - ** tricky and requires disobeying C99; - ** see GNU C strftime for details. - ** For now, punt and conform to the - ** standard, even though it's incorrect. - ** - ** C99 says that %z must be replaced by the - ** empty string if the time zone is not - ** determinable, so output nothing if the - ** appropriate variables are not available. - */ - if (t->tm_isdst == 0) -#ifdef USG_COMPAT - diff = -timezone; -#else /* !defined USG_COMPAT */ - continue; -#endif /* !defined USG_COMPAT */ - else -#ifdef ALTZONE - diff = -altzone; -#else /* !defined ALTZONE */ - continue; -#endif /* !defined ALTZONE */ -#endif /* !defined TM_GMTOFF */ - if (diff < 0) { - sign = "-"; - diff = -diff; - } else sign = "+"; - pt = _add(sign, pt, ptlim); - diff /= SECSPERMIN; - diff = (diff / MINSPERHOUR) * 100 + - (diff % MINSPERHOUR); - pt = _conv(diff, - fmt_padding[PAD_FMT_YEAR][PadIndex], pt, ptlim); - } - continue; - case '+': - pt = _fmt(tptr->date_fmt, t, pt, ptlim, - warnp); - continue; - case '-': - if (PadIndex != PAD_DEFAULT) - break; - PadIndex = PAD_LESS; - goto label; - case '_': - if (PadIndex != PAD_DEFAULT) - break; - PadIndex = PAD_SPACE; - goto label; - case '0': - if (PadIndex != PAD_DEFAULT) - break; - PadIndex = PAD_ZERO; - goto label; - case '%': - /* - ** X311J/88-090 (4.12.3.5): if conversion char is - ** undefined, behavior is undefined. Print out the - ** character itself as printf(3) also does. - */ - default: - break; - } - } - if (pt == ptlim) - break; - *pt++ = *format; - } - return pt; -} - -static char * -_conv(n, format, pt, ptlim) -const int n; -const char * const format; -char * const pt; -const char * const ptlim; -{ - char buf[INT_STRLEN_MAXIMUM(int) + 1]; - - (void) sprintf(buf, format, n); - return _add(buf, pt, ptlim); -} - -static char * -_add(str, pt, ptlim) -const char * str; -char * pt; -const char * const ptlim; -{ - while (pt < ptlim && (*pt = *str++) != '\0') - ++pt; - return pt; -} - -/* -** POSIX and the C Standard are unclear or inconsistent about -** what %C and %y do if the year is negative or exceeds 9999. -** Use the convention that %C concatenated with %y yields the -** same output as %Y, and that %Y contains at least 4 bytes, -** with more only if necessary. -*/ - -static char * -_yconv(a, b, convert_top, convert_yy, pt, ptlim) -const int a; -const int b; -const int convert_top; -const int convert_yy; -char * pt; -const char * const ptlim; -{ - register int lead; - register int trail; - -#define DIVISOR 100 - trail = a % DIVISOR + b % DIVISOR; - lead = a / DIVISOR + b / DIVISOR + trail / DIVISOR; - trail %= DIVISOR; - if (trail < 0 && lead > 0) { - trail += DIVISOR; - --lead; - } else if (lead < 0 && trail > 0) { - trail -= DIVISOR; - ++lead; - } - if (convert_top) { - if (lead == 0 && trail < 0) - pt = _add("-0", pt, ptlim); - else pt = _conv(lead, "%02d", pt, ptlim); - } - if (convert_yy) - pt = _conv(((trail < 0) ? -trail : trail), "%02d", pt, ptlim); - return pt; -} diff --git a/contrib/tzcode/stdtime/strptime.3 b/contrib/tzcode/stdtime/strptime.3 deleted file mode 100644 index 763696b..0000000 --- a/contrib/tzcode/stdtime/strptime.3 +++ /dev/null @@ -1,173 +0,0 @@ -.\" -.\" Copyright (c) 1997 Joerg Wunsch -.\" -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" " -.Dd January 4, 2003 -.Dt STRPTIME 3 -.Os -.Sh NAME -.Nm strptime -.Nd parse date and time string -.Sh LIBRARY -.Lb libc -.Sh SYNOPSIS -.In time.h -.Ft char * -.Fo strptime -.Fa "const char * restrict buf" -.Fa "const char * restrict format" -.Fa "struct tm * restrict timeptr" -.Fc -.Sh DESCRIPTION -The -.Fn strptime -function parses the string in the buffer -.Fa buf -according to the string pointed to by -.Fa format , -and fills in the elements of the structure pointed to by -.Fa timeptr . -The resulting values will be relative to the local time zone. -Thus, it can be considered the reverse operation of -.Xr strftime 3 . -.Pp -The -.Fa format -string consists of zero or more conversion specifications and -ordinary characters. -All ordinary characters are matched exactly with the buffer, where -white space in the format string will match any amount of white space -in the buffer. -All conversion specifications are identical to those described in -.Xr strftime 3 . -.Pp -Two-digit year values, including formats -.Fa %y -and -.Fa \&%D , -are now interpreted as beginning at 1969 per POSIX requirements. -Years 69-00 are interpreted in the 20th century (1969-2000), years -01-68 in the 21st century (2001-2068). -.Pp -If the -.Fa format -string does not contain enough conversion specifications to completely -specify the resulting -.Vt struct tm , -the unspecified members of -.Va timeptr -are left untouched. -For example, if -.Fa format -is -.Dq Li "%H:%M:%S" , -only -.Va tm_hour , -.Va tm_sec -and -.Va tm_min -will be modified. -If time relative to today is desired, initialize the -.Fa timeptr -structure with today's date before passing it to -.Fn strptime . -.Sh RETURN VALUES -Upon successful completion, -.Fn strptime -returns the pointer to the first character in -.Fa buf -that has not been required to satisfy the specified conversions in -.Fa format . -It returns -.Dv NULL -if one of the conversions failed. -.Sh SEE ALSO -.Xr date 1 , -.Xr scanf 3 , -.Xr strftime 3 -.Sh HISTORY -The -.Fn strptime -function appeared in -.Fx 3.0 . -.Sh AUTHORS -The -.Fn strptime -function has been contributed by Powerdog Industries. -.Pp -This man page was written by -.An J\(:org Wunsch . -.Sh BUGS -Both the -.Fa %e -and -.Fa %l -format specifiers may incorrectly scan one too many digits -if the intended values comprise only a single digit -and that digit is followed immediately by another digit. -Both specifiers accept zero-padded values, -even though they are both defined as taking unpadded values. -.Pp -The -.Fa %p -format specifier has no effect unless it is parsed -.Em after -hour-related specifiers. -Specifying -.Fa %l -without -.Fa %p -will produce undefined results. -Note that 12AM -(ante meridiem) -is taken as midnight -and 12PM -(post meridiem) -is taken as noon. -.Pp -The -.Fa \&%U -and -.Fa %W -format specifiers accept any value within the range 00 to 53 -without validating against other values supplied (like month -or day of the year, for example). -.Pp -The -.Fa %Z -format specifier only accepts time zone abbreviations of the local time zone, -or the value "GMT". -This limitation is because of ambiguity due to of the over loading of time -zone abbreviations. -One such example is -.Fa EST -which is both Eastern Standard Time and Eastern Australia Summer Time. -.Pp -The -.Fn strptime -function does not correctly handle multibyte characters in the -.Fa format -argument. diff --git a/contrib/tzcode/stdtime/strptime.c b/contrib/tzcode/stdtime/strptime.c deleted file mode 100644 index 51d41ed..0000000 --- a/contrib/tzcode/stdtime/strptime.c +++ /dev/null @@ -1,566 +0,0 @@ -/* - * Powerdog Industries kindly requests feedback from anyone modifying - * this function: - * - * Date: Thu, 05 Jun 1997 23:17:17 -0400 - * From: Kevin Ruddy <kevin.ruddy@powerdog.com> - * To: James FitzGibbon <james@nexis.net> - * Subject: Re: Use of your strptime(3) code (fwd) - * - * The reason for the "no mod" clause was so that modifications would - * come back and we could integrate them and reissue so that a wider - * audience could use it (thereby spreading the wealth). This has - * made it possible to get strptime to work on many operating systems. - * I'm not sure why that's "plain unacceptable" to the FreeBSD team. - * - * Anyway, you can change it to "with or without modification" as - * you see fit. Enjoy. - * - * Kevin Ruddy - * Powerdog Industries, Inc. - */ -/* - * Copyright (c) 1994 Powerdog Industries. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgement: - * This product includes software developed by Powerdog Industries. - * 4. The name of Powerdog Industries may not be used to endorse or - * promote products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY POWERDOG INDUSTRIES ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE POWERDOG INDUSTRIES BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -#ifndef lint -#ifndef NOID -static char copyright[] __unused = -"@(#) Copyright (c) 1994 Powerdog Industries. All rights reserved."; -static char sccsid[] __unused = "@(#)strptime.c 0.1 (Powerdog) 94/03/27"; -#endif /* !defined NOID */ -#endif /* not lint */ -__FBSDID("$FreeBSD$"); - -#include "namespace.h" -#include <time.h> -#include <ctype.h> -#include <errno.h> -#include <stdlib.h> -#include <string.h> -#include <pthread.h> -#include "un-namespace.h" -#include "libc_private.h" -#include "timelocal.h" - -static char * _strptime(const char *, const char *, struct tm *, int *); - -#define asizeof(a) (sizeof (a) / sizeof ((a)[0])) - -static char * -_strptime(const char *buf, const char *fmt, struct tm *tm, int *GMTp) -{ - char c; - const char *ptr; - int i, - len; - int Ealternative, Oalternative; - struct lc_time_T *tptr = __get_current_time_locale(); - - ptr = fmt; - while (*ptr != 0) { - if (*buf == 0) - break; - - c = *ptr++; - - if (c != '%') { - if (isspace((unsigned char)c)) - while (*buf != 0 && isspace((unsigned char)*buf)) - buf++; - else if (c != *buf++) - return 0; - continue; - } - - Ealternative = 0; - Oalternative = 0; -label: - c = *ptr++; - switch (c) { - case 0: - case '%': - if (*buf++ != '%') - return 0; - break; - - case '+': - buf = _strptime(buf, tptr->date_fmt, tm, GMTp); - if (buf == 0) - return 0; - break; - - case 'C': - if (!isdigit((unsigned char)*buf)) - return 0; - - /* XXX This will break for 3-digit centuries. */ - len = 2; - for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) { - i *= 10; - i += *buf - '0'; - len--; - } - if (i < 19) - return 0; - - tm->tm_year = i * 100 - 1900; - break; - - case 'c': - buf = _strptime(buf, tptr->c_fmt, tm, GMTp); - if (buf == 0) - return 0; - break; - - case 'D': - buf = _strptime(buf, "%m/%d/%y", tm, GMTp); - if (buf == 0) - return 0; - break; - - case 'E': - if (Ealternative || Oalternative) - break; - Ealternative++; - goto label; - - case 'O': - if (Ealternative || Oalternative) - break; - Oalternative++; - goto label; - - case 'F': - buf = _strptime(buf, "%Y-%m-%d", tm, GMTp); - if (buf == 0) - return 0; - break; - - case 'R': - buf = _strptime(buf, "%H:%M", tm, GMTp); - if (buf == 0) - return 0; - break; - - case 'r': - buf = _strptime(buf, tptr->ampm_fmt, tm, GMTp); - if (buf == 0) - return 0; - break; - - case 'T': - buf = _strptime(buf, "%H:%M:%S", tm, GMTp); - if (buf == 0) - return 0; - break; - - case 'X': - buf = _strptime(buf, tptr->X_fmt, tm, GMTp); - if (buf == 0) - return 0; - break; - - case 'x': - buf = _strptime(buf, tptr->x_fmt, tm, GMTp); - if (buf == 0) - return 0; - break; - - case 'j': - if (!isdigit((unsigned char)*buf)) - return 0; - - len = 3; - for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) { - i *= 10; - i += *buf - '0'; - len--; - } - if (i < 1 || i > 366) - return 0; - - tm->tm_yday = i - 1; - break; - - case 'M': - case 'S': - if (*buf == 0 || isspace((unsigned char)*buf)) - break; - - if (!isdigit((unsigned char)*buf)) - return 0; - - len = 2; - for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) { - i *= 10; - i += *buf - '0'; - len--; - } - - if (c == 'M') { - if (i > 59) - return 0; - tm->tm_min = i; - } else { - if (i > 60) - return 0; - tm->tm_sec = i; - } - - if (*buf != 0 && isspace((unsigned char)*buf)) - while (*ptr != 0 && !isspace((unsigned char)*ptr)) - ptr++; - break; - - case 'H': - case 'I': - case 'k': - case 'l': - /* - * Of these, %l is the only specifier explicitly - * documented as not being zero-padded. However, - * there is no harm in allowing zero-padding. - * - * XXX The %l specifier may gobble one too many - * digits if used incorrectly. - */ - if (!isdigit((unsigned char)*buf)) - return 0; - - len = 2; - for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) { - i *= 10; - i += *buf - '0'; - len--; - } - if (c == 'H' || c == 'k') { - if (i > 23) - return 0; - } else if (i > 12) - return 0; - - tm->tm_hour = i; - - if (*buf != 0 && isspace((unsigned char)*buf)) - while (*ptr != 0 && !isspace((unsigned char)*ptr)) - ptr++; - break; - - case 'p': - /* - * XXX This is bogus if parsed before hour-related - * specifiers. - */ - len = strlen(tptr->am); - if (strncasecmp(buf, tptr->am, len) == 0) { - if (tm->tm_hour > 12) - return 0; - if (tm->tm_hour == 12) - tm->tm_hour = 0; - buf += len; - break; - } - - len = strlen(tptr->pm); - if (strncasecmp(buf, tptr->pm, len) == 0) { - if (tm->tm_hour > 12) - return 0; - if (tm->tm_hour != 12) - tm->tm_hour += 12; - buf += len; - break; - } - - return 0; - - case 'A': - case 'a': - for (i = 0; i < asizeof(tptr->weekday); i++) { - len = strlen(tptr->weekday[i]); - if (strncasecmp(buf, tptr->weekday[i], - len) == 0) - break; - len = strlen(tptr->wday[i]); - if (strncasecmp(buf, tptr->wday[i], - len) == 0) - break; - } - if (i == asizeof(tptr->weekday)) - return 0; - - tm->tm_wday = i; - buf += len; - break; - - case 'U': - case 'W': - /* - * XXX This is bogus, as we can not assume any valid - * information present in the tm structure at this - * point to calculate a real value, so just check the - * range for now. - */ - if (!isdigit((unsigned char)*buf)) - return 0; - - len = 2; - for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) { - i *= 10; - i += *buf - '0'; - len--; - } - if (i > 53) - return 0; - - if (*buf != 0 && isspace((unsigned char)*buf)) - while (*ptr != 0 && !isspace((unsigned char)*ptr)) - ptr++; - break; - - case 'w': - if (!isdigit((unsigned char)*buf)) - return 0; - - i = *buf - '0'; - if (i > 6) - return 0; - - tm->tm_wday = i; - - if (*buf != 0 && isspace((unsigned char)*buf)) - while (*ptr != 0 && !isspace((unsigned char)*ptr)) - ptr++; - break; - - case 'd': - case 'e': - /* - * The %e specifier is explicitly documented as not - * being zero-padded but there is no harm in allowing - * such padding. - * - * XXX The %e specifier may gobble one too many - * digits if used incorrectly. - */ - if (!isdigit((unsigned char)*buf)) - return 0; - - len = 2; - for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) { - i *= 10; - i += *buf - '0'; - len--; - } - if (i > 31) - return 0; - - tm->tm_mday = i; - - if (*buf != 0 && isspace((unsigned char)*buf)) - while (*ptr != 0 && !isspace((unsigned char)*ptr)) - ptr++; - break; - - case 'B': - case 'b': - case 'h': - for (i = 0; i < asizeof(tptr->month); i++) { - if (Oalternative) { - if (c == 'B') { - len = strlen(tptr->alt_month[i]); - if (strncasecmp(buf, - tptr->alt_month[i], - len) == 0) - break; - } - } else { - len = strlen(tptr->month[i]); - if (strncasecmp(buf, tptr->month[i], - len) == 0) - break; - len = strlen(tptr->mon[i]); - if (strncasecmp(buf, tptr->mon[i], - len) == 0) - break; - } - } - if (i == asizeof(tptr->month)) - return 0; - - tm->tm_mon = i; - buf += len; - break; - - case 'm': - if (!isdigit((unsigned char)*buf)) - return 0; - - len = 2; - for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) { - i *= 10; - i += *buf - '0'; - len--; - } - if (i < 1 || i > 12) - return 0; - - tm->tm_mon = i - 1; - - if (*buf != 0 && isspace((unsigned char)*buf)) - while (*ptr != 0 && !isspace((unsigned char)*ptr)) - ptr++; - break; - - case 's': - { - char *cp; - int sverrno; - long n; - time_t t; - - sverrno = errno; - errno = 0; - n = strtol(buf, &cp, 10); - if (errno == ERANGE || (long)(t = n) != n) { - errno = sverrno; - return 0; - } - errno = sverrno; - buf = cp; - gmtime_r(&t, tm); - *GMTp = 1; - } - break; - - case 'Y': - case 'y': - if (*buf == 0 || isspace((unsigned char)*buf)) - break; - - if (!isdigit((unsigned char)*buf)) - return 0; - - len = (c == 'Y') ? 4 : 2; - for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) { - i *= 10; - i += *buf - '0'; - len--; - } - if (c == 'Y') - i -= 1900; - if (c == 'y' && i < 69) - i += 100; - if (i < 0) - return 0; - - tm->tm_year = i; - - if (*buf != 0 && isspace((unsigned char)*buf)) - while (*ptr != 0 && !isspace((unsigned char)*ptr)) - ptr++; - break; - - case 'Z': - { - const char *cp; - char *zonestr; - - for (cp = buf; *cp && isupper((unsigned char)*cp); ++cp) {/*empty*/} - if (cp - buf) { - zonestr = alloca(cp - buf + 1); - strncpy(zonestr, buf, cp - buf); - zonestr[cp - buf] = '\0'; - tzset(); - if (0 == strcmp(zonestr, "GMT")) { - *GMTp = 1; - } else if (0 == strcmp(zonestr, tzname[0])) { - tm->tm_isdst = 0; - } else if (0 == strcmp(zonestr, tzname[1])) { - tm->tm_isdst = 1; - } else { - return 0; - } - buf += cp - buf; - } - } - break; - - case 'z': - { - int sign = 1; - - if (*buf != '+') { - if (*buf == '-') - sign = -1; - else - return 0; - } - - buf++; - i = 0; - for (len = 4; len > 0; len--) { - if (isdigit((unsigned char)*buf)) { - i *= 10; - i += *buf - '0'; - buf++; - } else - return 0; - } - - tm->tm_hour -= sign * (i / 100); - tm->tm_min -= sign * (i % 100); - *GMTp = 1; - } - break; - } - } - return (char *)buf; -} - - -char * -strptime(const char * __restrict buf, const char * __restrict fmt, - struct tm * __restrict tm) -{ - char *ret; - int gmt; - - gmt = 0; - ret = _strptime(buf, fmt, tm, &gmt); - if (ret && gmt) { - time_t t = timegm(tm); - localtime_r(&t, tm); - } - - return (ret); -} diff --git a/contrib/tzcode/stdtime/time32.c b/contrib/tzcode/stdtime/time32.c deleted file mode 100644 index e852a4f..0000000 --- a/contrib/tzcode/stdtime/time32.c +++ /dev/null @@ -1,100 +0,0 @@ -/*- - * Copyright (c) 2001 FreeBSD Inc. - * All rights reserved. - * - * These routines are for converting time_t to fixed-bit representations - * for use in protocols or storage. When converting time to a larger - * representation of time_t these routines are expected to assume temporal - * locality and use the 50-year rule to properly set the msb bits. XXX - * - * Redistribution and use under the terms of the COPYRIGHT file at the - * base of the source tree. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/types.h> -#include <timeconv.h> - -/* - * Convert a 32 bit representation of time_t into time_t. XXX needs to - * implement the 50-year rule to handle post-2038 conversions. - */ -time_t -_time32_to_time(__int32_t t32) -{ - return((time_t)t32); -} - -/* - * Convert time_t to a 32 bit representation. If time_t is 64 bits we can - * simply chop it down. The resulting 32 bit representation can be - * converted back to a temporally local 64 bit time_t using time32_to_time. - */ -__int32_t -_time_to_time32(time_t t) -{ - return((__int32_t)t); -} - -/* - * Convert a 64 bit representation of time_t into time_t. If time_t is - * represented as 32 bits we can simply chop it and not support times - * past 2038. - */ -time_t -_time64_to_time(__int64_t t64) -{ - return((time_t)t64); -} - -/* - * Convert time_t to a 64 bit representation. If time_t is represented - * as 32 bits we simply sign-extend and do not support times past 2038. - */ -__int64_t -_time_to_time64(time_t t) -{ - return((__int64_t)t); -} - -/* - * Convert to/from 'long'. Depending on the sizeof(long) this may or - * may not require using the 50-year rule. - */ -long -_time_to_long(time_t t) -{ - if (sizeof(long) == sizeof(__int64_t)) - return(_time_to_time64(t)); - return((long)t); -} - -time_t -_long_to_time(long tlong) -{ - if (sizeof(long) == sizeof(__int32_t)) - return(_time32_to_time(tlong)); - return((time_t)tlong); -} - -/* - * Convert to/from 'int'. Depending on the sizeof(int) this may or - * may not require using the 50-year rule. - */ -int -_time_to_int(time_t t) -{ - if (sizeof(int) == sizeof(__int64_t)) - return(_time_to_time64(t)); - return((int)t); -} - -time_t -_int_to_time(int tint) -{ - if (sizeof(int) == sizeof(__int32_t)) - return(_time32_to_time(tint)); - return((time_t)tint); -} diff --git a/contrib/tzcode/stdtime/timelocal.c b/contrib/tzcode/stdtime/timelocal.c deleted file mode 100644 index 6917e6b..0000000 --- a/contrib/tzcode/stdtime/timelocal.c +++ /dev/null @@ -1,117 +0,0 @@ -/*- - * Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org> - * Copyright (c) 1997 FreeBSD Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stddef.h> - -#include "ldpart.h" -#include "timelocal.h" - -static struct lc_time_T _time_locale; -static int _time_using_locale; -static char *time_locale_buf; - -#define LCTIME_SIZE (sizeof(struct lc_time_T) / sizeof(char *)) - -static const struct lc_time_T _C_time_locale = { - { - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" - }, { - "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December" - }, { - "Sun", "Mon", "Tue", "Wed", - "Thu", "Fri", "Sat" - }, { - "Sunday", "Monday", "Tuesday", "Wednesday", - "Thursday", "Friday", "Saturday" - }, - - /* X_fmt */ - "%H:%M:%S", - - /* - * x_fmt - * Since the C language standard calls for - * "date, using locale's date format," anything goes. - * Using just numbers (as here) makes Quakers happier; - * it's also compatible with SVR4. - */ - "%m/%d/%y", - - /* - * c_fmt - */ - "%a %b %e %H:%M:%S %Y", - - /* am */ - "AM", - - /* pm */ - "PM", - - /* date_fmt */ - "%a %b %e %H:%M:%S %Z %Y", - - /* alt_month - * Standalone months forms for %OB - */ - { - "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December" - }, - - /* md_order - * Month / day order in dates - */ - "md", - - /* ampm_fmt - * To determine 12-hour clock format time (empty, if N/A) - */ - "%I:%M:%S %p" -}; - -struct lc_time_T * -__get_current_time_locale(void) -{ - return (_time_using_locale - ? &_time_locale - : (struct lc_time_T *)&_C_time_locale); -} - -int -__time_load_locale(const char *name) -{ - return (__part_load_locale(name, &_time_using_locale, - &time_locale_buf, "LC_TIME", - LCTIME_SIZE, LCTIME_SIZE, - (const char **)&_time_locale)); -} diff --git a/contrib/tzcode/stdtime/timelocal.h b/contrib/tzcode/stdtime/timelocal.h deleted file mode 100644 index 5d26bf9..0000000 --- a/contrib/tzcode/stdtime/timelocal.h +++ /dev/null @@ -1,55 +0,0 @@ -/*- - * Copyright (c) 1997-2002 FreeBSD Project. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef _TIMELOCAL_H_ -#define _TIMELOCAL_H_ - -/* - * Private header file for the strftime and strptime localization - * stuff. - */ -struct lc_time_T { - const char *mon[12]; - const char *month[12]; - const char *wday[7]; - const char *weekday[7]; - const char *X_fmt; - const char *x_fmt; - const char *c_fmt; - const char *am; - const char *pm; - const char *date_fmt; - const char *alt_month[12]; - const char *md_order; - const char *ampm_fmt; -}; - -struct lc_time_T *__get_current_time_locale(void); -int __time_load_locale(const char *); - -#endif /* !_TIMELOCAL_H_ */ |