1
0
mirror of https://frontier.innolan.net/rainlance/amiga-tz.git synced 2025-11-22 20:18:02 +00:00

Revert the change that added meta-information to version-3 format.

Further testing found that it was incompatible with Ubuntu 12.04 glibc
so this feature requires redesign and more testing.
* Makefile (ZFLAGS): Remove comment about name and version info.
Make it an empty var instead.
* tzfile.5, tzfile.h: Remove description of meta-information.
* zic.8: Remove options -n and -o.
* zic.c: Don't include <stddef.h>.
(genoption, genoptions, genname, addgenoption, writevalue): Remove.
(usage, main, writezone): Remove support for -n and -o.
This commit is contained in:
Paul Eggert
2013-09-11 02:42:07 -07:00
parent 2022cddf08
commit a46793a95b
5 changed files with 7 additions and 104 deletions

View File

@ -241,8 +241,7 @@ LDFLAGS= $(LFLAGS)
zic= ./zic
ZIC= $(zic) $(ZFLAGS)
# Uncomment this to put name and version info into zic output files.
#ZFLAGS= -n -o version='$(VERSION)'
ZFLAGS=
# The name of a Posix-compliant `awk' on your system.
AWK= awk

View File

@ -134,43 +134,22 @@ For version-2-format time zone files,
the above header and data are followed by a second header and data,
identical in format except that
eight bytes are used for each transition time or leap second time.
After the second header and data,
and just before the end of the file, comes a newline-enclosed,
After the second header and data comes a newline-enclosed,
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).
.PP
Version-3-format time zone files have the following additions:
.IP
The POSIX-TZ-style string may use two minor extensions to the
POSIX TZ format, as described in
For version-3-format time zone files, the POSIX-TZ-style string may
use two minor extensions to the POSIX TZ format, as described in
.IR newtzset (3).
First, the hours part of its transition times may be signed and range from
\(mi167 through 167 instead of the POSIX-required unsigned values
from 0 through 24. Second, DST is in effect all year if it starts
January 1 at 00:00 and ends December 31 at 24:00 plus the difference
between daylight saving and standard time.
.IP
The newline-enclosed POSIX-TZ-style string is preceded by a section
containing auxiliary meta-information that is not needed to process
time stamps. This section consists of another copy of the
newline-enclosed POSIX-TZ-style string (this is for the benefit of
version-2-only clients), followed by a four-byte integer size value,
followed by zero or more NUL-terminated byte strings, followed by an
additional NUL. The size value is the total number of bytes in all
the byte strings, including the trailing NULs at the end of the
strings, but not including the additional NUL. Each byte string
consists of a name-value pair separated by "=". Names consist of
ASCII letters, digits and underscores, and start with a letter;
duplicate names are not allowed. Two common names are "name", the
Zone name for the data, and "version", the data's version number.
Values can contain any bytes except NUL.
.PP
Future additions to the format may insert more data just before the
newline-enclosed POSIX-TZ-style string at the end of the file, so
clients should not assume that this string immediately follows
the auxiliary meta-information.
Future changes to the format may append more data.
.SH SEE ALSO
newctime(3), newtzset(3)
.\" This file is in the public domain, so clarified as of

View File

@ -89,12 +89,6 @@ struct tzhead {
** 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.
** Third, the newline-enclosed TZ string is preceded by a new section
** consisting of another copy of the string, followed by a four-byte
** integer size value, followed by zero or more NUL-terminated
** name=value byte strings, followed by an additional NUL. The size
** value gives the total size of the name=value byte strings,
** including their terminating NUL bytes, but excluding the additional NUL.
*/
/*

14
zic.8
View File

@ -15,11 +15,6 @@ zic \- time zone compiler
.B \-l
.I localtime
] [
.B \-n
] [
.B \-o
.IB name = value
] [
.B \-p
.I posixrules
] [
@ -67,15 +62,6 @@ will act as if the input contained a link line of the form
.ti +.5i
Link \fItimezone\fP localtime
.TP
.B "\-n"
Store each zone's name into its generated file, as meta-information
with the name "name" and value the zone's name.
.TP
.BI "\-o " name = value
Store the given name-value pair into the generated file, as
meta-information. This option can be repeated, once for each distinct
name.
.TP
.BI "\-p " timezone
Use the given time zone's rules when handling POSIX-format
time zone environment variables.

59
zic.c
View File

@ -9,7 +9,6 @@
#include "tzfile.h"
#include <stdarg.h>
#include <stddef.h>
#define ZIC_VERSION '3'
@ -141,9 +140,6 @@ static int yearistype(int year, const char * type);
static int charcnt;
static int errors;
static const char * filename;
static const char ** genoption;
static int genoptions;
static int genname;
static int leapcnt;
static int leapseen;
static zic_t leapminyear;
@ -436,8 +432,7 @@ static _Noreturn void
usage(FILE *stream, int status)
{
(void) fprintf(stream, _("%s: usage is %s \
[ --version ] [ --help ] [ -v ] [ -l localtime ]\\\n\
\t[ -n ] [ -o name=value ]... [ -p posixrules ] \\\n\
[ --version ] [ --help ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n\
\n\
Report bugs to %s.\n"),
@ -451,29 +446,6 @@ static const char * directory;
static const char * leapsec;
static const char * yitcommand;
static int
addgenoption(char const *option)
{
register char const *o = option;
register ptrdiff_t namelen;
register int i;
if (! (isascii (*o) && isalpha(*o)))
return 0;
while (*++o != '=')
if (! (isascii (*o) && (isalnum(*o) || *o == '_')))
return 0;
namelen = o - option;
if (namelen == sizeof "name" - 1
&& memcmp(option, "name", namelen) == 0)
return 0;
for (i = 0; i < genoptions; i++)
if (strncmp(genoption[i], option, namelen + 1) == 0)
return 0;
genoption = erealloc(genoption, (genoptions + 1) * sizeof *genoption);
genoption[genoptions++] = option;
return 1;
}
int
main(int argc, char **argv)
{
@ -504,7 +476,7 @@ main(int argc, char **argv)
} else if (strcmp(argv[i], "--help") == 0) {
usage(stdout, EXIT_SUCCESS);
}
while ((c = getopt(argc, argv, "d:l:p:L:no:vsy:")) != EOF && c != -1)
while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF && c != -1)
switch (c) {
default:
usage(stderr, EXIT_FAILURE);
@ -528,17 +500,6 @@ _("%s: More than one -l option specified\n"),
exit(EXIT_FAILURE);
}
break;
case 'n':
genname = TRUE;
break;
case 'o':
if (!addgenoption(optarg)) {
fprintf(stderr,
_("%s: %s: invalid -o option\n"),
progname, optarg);
exit(EXIT_FAILURE);
}
break;
case 'p':
if (psxrules == NULL)
psxrules = optarg;
@ -1432,7 +1393,6 @@ writezone(const char *const name, const char *const string)
register int leapcnt32, leapi32;
register int timecnt32, timei32;
register int pass;
register int_fast32_t genlen;
static char * fullname;
static const struct tzhead tzh0;
static struct tzhead tzh;
@ -1748,21 +1708,6 @@ writezone(const char *const name, const char *const string)
(void) putc(ttisgmts[i], fp);
}
(void) fprintf(fp, "\n%s\n", string);
genlen = 0;
if (genname)
genlen += sizeof "name=" + strlen (name);
for (i = 0; i < genoptions; i++)
genlen += strlen (genoption[i]) + 1;
puttzcode(genlen, fp);
if (genname)
fprintf(fp, "name=%s%c", name, 0);
for (i = 0; i < genoptions; i++) {
register char const *v = genoption[i];
fprintf(fp, "%s%c", v, 0);
}
fprintf(fp, "%c\n%s\n", 0, string);
if (ferror(fp) || fclose(fp)) {
(void) fprintf(stderr, _("%s: Error writing %s\n"),
progname, fullname);