2020-06-15 14:18:57 +00:00
|
|
|
#ifndef TZFILE_H
|
|
|
|
#define TZFILE_H
|
2022-04-27 12:39:39 +00:00
|
|
|
/* clang-format off */
|
|
|
|
/* Layout and location of TZif files. */
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
** This file is in the public domain, so clarified as of
|
|
|
|
** 1996-06-05 by Arthur David Olson.
|
|
|
|
*/
|
|
|
|
|
2022-04-27 12:39:39 +00:00
|
|
|
/*
|
|
|
|
** This header is for use ONLY with the time conversion code.
|
|
|
|
** There is no guarantee that it will remain unchanged,
|
|
|
|
** or that it will remain at all.
|
|
|
|
** Do NOT copy it to any system include directory.
|
|
|
|
** Thank you!
|
|
|
|
*/
|
|
|
|
|
2020-06-15 14:18:57 +00:00
|
|
|
/*
|
|
|
|
** Information about time zone files.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef TZDIR
|
2022-04-27 12:39:39 +00:00
|
|
|
#define TZDIR "/zip/usr/share/zoneinfo" /* Time zone object file directory */
|
|
|
|
#endif /* !defined TZDIR */
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
#ifndef TZDEFAULT
|
2022-04-27 12:39:39 +00:00
|
|
|
#define TZDEFAULT "GST"
|
|
|
|
#endif /* !defined TZDEFAULT */
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
#ifndef TZDEFRULES
|
2022-04-27 12:39:39 +00:00
|
|
|
#define TZDEFRULES "New_York"
|
|
|
|
#endif /* !defined TZDEFRULES */
|
|
|
|
|
|
|
|
|
|
|
|
/* See Internet RFC 8536 for more details about the following format. */
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
** Each file begins with. . .
|
|
|
|
*/
|
|
|
|
|
2022-04-27 12:39:39 +00:00
|
|
|
#define TZ_MAGIC "TZif"
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
struct tzhead {
|
2022-04-27 12:39:39 +00:00
|
|
|
char tzh_magic[4]; /* TZ_MAGIC */
|
|
|
|
char tzh_version[1]; /* '\0' or '2'-'4' as of 2021 */
|
|
|
|
char tzh_reserved[15]; /* reserved; must be zero */
|
|
|
|
char tzh_ttisutcnt[4]; /* coded number of trans. time flags */
|
|
|
|
char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */
|
|
|
|
char tzh_leapcnt[4]; /* coded number of leap seconds */
|
|
|
|
char tzh_timecnt[4]; /* coded number of transition times */
|
|
|
|
char tzh_typecnt[4]; /* coded number of local time types */
|
|
|
|
char tzh_charcnt[4]; /* coded number of abbr. chars */
|
2020-06-15 14:18:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
** . . .followed by. . .
|
|
|
|
**
|
|
|
|
** tzh_timecnt (char [4])s coded transition times a la time(2)
|
|
|
|
** tzh_timecnt (unsigned char)s types of local time starting at above
|
|
|
|
** tzh_typecnt repetitions of
|
|
|
|
** one (char [4]) coded UT offset in seconds
|
|
|
|
** one (unsigned char) used to set tm_isdst
|
|
|
|
** one (unsigned char) that's an abbreviation list index
|
|
|
|
** tzh_charcnt (char)s '\0'-terminated zone abbreviations
|
|
|
|
** tzh_leapcnt repetitions of
|
|
|
|
** one (char [4]) coded leap second transition times
|
|
|
|
** one (char [4]) total correction after above
|
|
|
|
** tzh_ttisstdcnt (char)s indexed by type; if 1, transition
|
|
|
|
** time is standard time, if 0,
|
2022-04-27 12:39:39 +00:00
|
|
|
** transition time is local (wall clock)
|
|
|
|
** time; if absent, transition times are
|
2020-06-15 14:18:57 +00:00
|
|
|
** assumed to be local time
|
2022-04-27 12:39:39 +00:00
|
|
|
** tzh_ttisutcnt (char)s indexed by type; if 1, transition
|
|
|
|
** time is UT, if 0, transition time is
|
|
|
|
** local time; if absent, transition
|
|
|
|
** times are assumed to be local time.
|
|
|
|
** When this is 1, the corresponding
|
|
|
|
** std/wall indicator must also be 1.
|
2020-06-15 14:18:57 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
** If tzh_version is '2' or greater, the above is followed by a second instance
|
|
|
|
** of tzhead and a second instance of the data in which each coded transition
|
|
|
|
** time uses 8 rather than 4 chars,
|
|
|
|
** then a POSIX-TZ-environment-variable-style string for use in handling
|
|
|
|
** instants after the last transition time stored in the file
|
|
|
|
** (with nothing between the newlines if there is no POSIX representation for
|
|
|
|
** such instants).
|
|
|
|
**
|
|
|
|
** If tz_version is '3' or greater, the above is extended as follows.
|
|
|
|
** First, the POSIX TZ string's hour offset may range from -167
|
|
|
|
** through 167 as compared to the POSIX-required 0 through 24.
|
|
|
|
** Second, its DST start time may be January 1 at 00:00 and its stop
|
|
|
|
** time December 31 at 24:00 plus the difference between DST and
|
|
|
|
** standard time, indicating DST all year.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
** In the current implementation, "tzset()" refuses to deal with files that
|
|
|
|
** exceed any of the limits below.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef TZ_MAX_TIMES
|
2022-04-27 12:39:39 +00:00
|
|
|
#define TZ_MAX_TIMES 2000
|
2020-06-15 14:18:57 +00:00
|
|
|
#endif /* !defined TZ_MAX_TIMES */
|
|
|
|
|
|
|
|
#ifndef TZ_MAX_TYPES
|
|
|
|
/* This must be at least 17 for Europe/Samara and Europe/Vilnius. */
|
2022-04-27 12:39:39 +00:00
|
|
|
#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */
|
Improve ZIP filesystem and change its prefix
The ZIP filesystem has a breaking change. You now need to use /zip/ to
open() / opendir() / etc. assets within the ZIP structure of your APE
binary, instead of the previous convention of using zip: or zip! URIs.
This is needed because Python likes to use absolute paths, and having
ZIP paths encoded like URIs simply broke too many things.
Many more system calls have been updated to be able to operate on ZIP
files and file descriptors. In particular fcntl() and ioctl() since
Python would do things like ask if a ZIP file is a terminal and get
confused when the old implementation mistakenly said yes, because the
fastest way to guarantee native file descriptors is to dup(2). This
change also improves the async signal safety of zipos and ensures it
doesn't maintain any open file descriptors beyond that which the user
has opened.
This change makes a lot of progress towards adding magic numbers that
are specific to platforms other than Linux. The philosophy here is that,
if you use an operating system like FreeBSD, then you should be able to
take advantage of FreeBSD exclusive features, even if we don't polyfill
them on other platforms. For example, you can now open() a file with the
O_VERIFY flag. If your program runs on other platforms, then Cosmo will
automatically set O_VERIFY to zero. This lets you safely use it without
the need for #ifdef or ifstatements which detract from readability.
One of the blindspots of the ASAN memory hardening we use to offer Rust
like assurances has always been that memory passed to the kernel via
system calls (e.g. writev) can't be checked automatically since the
kernel wasn't built with MODE=asan. This change makes more progress
ensuring that each system call will verify the soundness of memory
before it's passed to the kernel. The code for doing these checks is
fast, particularly for buffers, where it can verify 64 bytes a cycle.
- Correct O_LOOP definition on NT
- Introduce program_executable_name
- Add ASAN guards to more system calls
- Improve termios compatibility with BSDs
- Fix bug in Windows auxiliary value encoding
- Add BSD and XNU specific errnos and open flags
- Add check to ensure build doesn't talk to internet
2021-08-22 08:04:18 +00:00
|
|
|
#endif /* !defined TZ_MAX_TYPES */
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
#ifndef TZ_MAX_CHARS
|
2022-04-27 12:39:39 +00:00
|
|
|
#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */
|
|
|
|
/* (limited by what unsigned chars can hold) */
|
Improve ZIP filesystem and change its prefix
The ZIP filesystem has a breaking change. You now need to use /zip/ to
open() / opendir() / etc. assets within the ZIP structure of your APE
binary, instead of the previous convention of using zip: or zip! URIs.
This is needed because Python likes to use absolute paths, and having
ZIP paths encoded like URIs simply broke too many things.
Many more system calls have been updated to be able to operate on ZIP
files and file descriptors. In particular fcntl() and ioctl() since
Python would do things like ask if a ZIP file is a terminal and get
confused when the old implementation mistakenly said yes, because the
fastest way to guarantee native file descriptors is to dup(2). This
change also improves the async signal safety of zipos and ensures it
doesn't maintain any open file descriptors beyond that which the user
has opened.
This change makes a lot of progress towards adding magic numbers that
are specific to platforms other than Linux. The philosophy here is that,
if you use an operating system like FreeBSD, then you should be able to
take advantage of FreeBSD exclusive features, even if we don't polyfill
them on other platforms. For example, you can now open() a file with the
O_VERIFY flag. If your program runs on other platforms, then Cosmo will
automatically set O_VERIFY to zero. This lets you safely use it without
the need for #ifdef or ifstatements which detract from readability.
One of the blindspots of the ASAN memory hardening we use to offer Rust
like assurances has always been that memory passed to the kernel via
system calls (e.g. writev) can't be checked automatically since the
kernel wasn't built with MODE=asan. This change makes more progress
ensuring that each system call will verify the soundness of memory
before it's passed to the kernel. The code for doing these checks is
fast, particularly for buffers, where it can verify 64 bytes a cycle.
- Correct O_LOOP definition on NT
- Introduce program_executable_name
- Add ASAN guards to more system calls
- Improve termios compatibility with BSDs
- Fix bug in Windows auxiliary value encoding
- Add BSD and XNU specific errnos and open flags
- Add check to ensure build doesn't talk to internet
2021-08-22 08:04:18 +00:00
|
|
|
#endif /* !defined TZ_MAX_CHARS */
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
#ifndef TZ_MAX_LEAPS
|
2022-04-27 12:39:39 +00:00
|
|
|
#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */
|
Improve ZIP filesystem and change its prefix
The ZIP filesystem has a breaking change. You now need to use /zip/ to
open() / opendir() / etc. assets within the ZIP structure of your APE
binary, instead of the previous convention of using zip: or zip! URIs.
This is needed because Python likes to use absolute paths, and having
ZIP paths encoded like URIs simply broke too many things.
Many more system calls have been updated to be able to operate on ZIP
files and file descriptors. In particular fcntl() and ioctl() since
Python would do things like ask if a ZIP file is a terminal and get
confused when the old implementation mistakenly said yes, because the
fastest way to guarantee native file descriptors is to dup(2). This
change also improves the async signal safety of zipos and ensures it
doesn't maintain any open file descriptors beyond that which the user
has opened.
This change makes a lot of progress towards adding magic numbers that
are specific to platforms other than Linux. The philosophy here is that,
if you use an operating system like FreeBSD, then you should be able to
take advantage of FreeBSD exclusive features, even if we don't polyfill
them on other platforms. For example, you can now open() a file with the
O_VERIFY flag. If your program runs on other platforms, then Cosmo will
automatically set O_VERIFY to zero. This lets you safely use it without
the need for #ifdef or ifstatements which detract from readability.
One of the blindspots of the ASAN memory hardening we use to offer Rust
like assurances has always been that memory passed to the kernel via
system calls (e.g. writev) can't be checked automatically since the
kernel wasn't built with MODE=asan. This change makes more progress
ensuring that each system call will verify the soundness of memory
before it's passed to the kernel. The code for doing these checks is
fast, particularly for buffers, where it can verify 64 bytes a cycle.
- Correct O_LOOP definition on NT
- Introduce program_executable_name
- Add ASAN guards to more system calls
- Improve termios compatibility with BSDs
- Fix bug in Windows auxiliary value encoding
- Add BSD and XNU specific errnos and open flags
- Add check to ensure build doesn't talk to internet
2021-08-22 08:04:18 +00:00
|
|
|
#endif /* !defined TZ_MAX_LEAPS */
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
#endif /* !defined TZFILE_H */
|