/* FUNCTION <>---set timezone characteristics from <[TZ]> environment variable INDEX tzset INDEX _tzset_r SYNOPSIS #include void tzset(void); void _tzset_r (struct _reent *<[reent_ptr]>); DESCRIPTION <> examines the <[TZ]> environment variable and sets up the three external variables: <<_timezone>>, <<_daylight>>, and <>. The value of <<_timezone>> shall be the offset from the current time to Universal Time. The value of <<_daylight>> shall be 0 if there is no daylight savings time for the current time zone, otherwise it will be non-zero. The <> array has two entries: the first is the designation of the standard time period, the second is the designation of the alternate time period. The <[TZ]> environment variable is expected to be in the following POSIX format (spaces inserted for clarity): <[std]> <[offset1]> [<[dst]> [<[offset2]>] [,<[start]> [/<[time1]>], <[end]> [/<[time2]>]]] where: <[std]> is the designation for the standard time period (minimum 3, maximum <> bytes) in one of two forms: *- quoted within angle bracket '<' '>' characters: portable numeric sign or alphanumeric characters in the current locale; the quoting characters are not included in the designation *- unquoted: portable alphabetic characters in the current locale <[offset1]> is the value to add to local standard time to get Universal Time; it has the format: [<[S]>]<[hh]>[:<[mm]>[:<[ss]>]] where: <[S]> is an optional numeric sign character; if negative '-', the time zone is East of the International Reference Meridian; else it is positive and West, and '+' may be used <[hh]> is the required numeric hour between 0 and 24 <[mm]> is the optional numeric minute between 0 and 59 <[ss]> is the optional numeric second between 0 and 59 <[dst]> is the designation of the alternate (daylight saving or summer) time period, with the same limits and forms as the standard time period designation <[offset2]> is the value to add to local alternate time to get Universal Time; it has the same format as <[offset1]> <[start]> is the date in the year that alternate time starts; the form may be one of: (quotes "'" around characters below are used only to distinguish literals) <[n]> zero based Julian day (0-365), counting February 29 Leap days 'J'<[n]> one based Julian day (1-365), not counting February 29 Leap days; in all years day 59 is February 28 and day 60 is March 1 'M'<[m]>'.'<[w]>'.'<[d]> month <[m]> (1-12) week <[w]> (1-5) day <[d]> (0-6) where week 1 is the first week in month <[m]> with day <[d]>; week 5 is the last week in the month; day 0 is Sunday <[time1]> is the optional local time that alternate time starts, in the same format as <[offset1]> without any sign, and defaults to 02:00:00 <[end]> is the date in the year that alternate time ends, in the same forms as <[start]> <[time2]> is the optional local time that alternate time ends, in the same format as <[offset1]> without any sign, and defaults to 02:00:00 Note that there is no white-space padding between fields. Also note that if <[TZ]> is null, the default is Universal Time which has no daylight saving time. If <[TZ]> is empty, the default EST5EDT is used. The function <<_tzset_r>> is identical to <> only it is reentrant and is used for applications that use multiple threads. RETURNS There is no return value. PORTABILITY <> is part of the POSIX standard. Supporting OS subroutine required: None */ #include <_ansi.h> #include #include #include "local.h" void _tzset_unlocked (void) { _tzset_unlocked_r (_REENT); } void tzset (void) { TZ_LOCK; _tzset_unlocked_r (_REENT); TZ_UNLOCK; }