[tz] version information in tz binary file?
Paul Eggert
eggert at cs.ucla.edu
Tue Sep 10 05:35:10 UTC 2013
Arthur David Olson wrote:
> That way folks who look for the POSIX string at the very end of the file
> will find it, and folks who look for it after the 64-bit data will too.
Thanks! Here's a patch to implement that; I've pushed this
to the experimental repository.
>From d74d5b95008e7a00da6fc66afc618ea8296fd43e Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert at cs.ucla.edu>
Date: Mon, 9 Sep 2013 22:32:56 -0700
Subject: [PATCH] * tzfile.5: Repeat the TZ string after the name-value pairs.
Suggested by Arthur David Olson in
<http://mm.icann.org/pipermail/tz/2013-September/020100.html>.
* zic.c (writezone): Implement this.
---
tzfile.5 | 21 ++++++++++++---------
zic.c | 22 ++++++++++++----------
2 files changed, 24 insertions(+), 19 deletions(-)
diff --git a/tzfile.5 b/tzfile.5
index d609277..d9477eb 100644
--- a/tzfile.5
+++ b/tzfile.5
@@ -158,15 +158,18 @@ between daylight saving and standard time.
Also, for version-3-format time zone files, the version-2 header and
data are optionally followed by a section containing auxiliary
meta-information that is not needed to process time stamps. This
-section, if present, consists of the four magic bytes "=TZ\en"
-followed by zero or more newline-terminated byte strings, each
-containing 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 version number. Values consist of any
-bytes except NUL, newline, and backslash; however, newline and
-backslash can represented via the two-byte strings "\en" and "\e\e"
-respectively.
+section, if present, consists of the four magic bytes "=TZ\en",
+followed by zero or more newline-terminated byte strings, followed by
+another copy of the newline-enclosed POSIX-TZ-style string (this last
+is for the benefit of any older clients that look for the TZ string at
+the very end of the file). Each newline-terminated byte string
+consists of a name-value pair separated by "=" and terminated by
+newline. 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
+version number. Values consist of any bytes except NUL, newline, and
+backslash; however, newline and backslash can represented via the
+two-byte strings "\en" and "\e\e" respectively.
.SH SEE ALSO
newctime(3), newtzset(3)
.\" This file is in the public domain, so clarified as of
diff --git a/zic.c b/zic.c
index eefa1fb..17b9e0e 100644
--- a/zic.c
+++ b/zic.c
@@ -1765,17 +1765,19 @@ writezone(const char *const name, const char *const string)
(void) putc(ttisgmts[i], fp);
}
(void) fprintf(fp, "\n%s\n", string);
- if (genname || genoptions)
+ if (genname || genoptions) {
fprintf(fp, "=TZ\n");
- if (genname) {
- fprintf(fp, "name");
- writevalue(fp, name);
- }
- for (i = 0; i < genoptions; i++) {
- register char const *v = genoption[i];
- register int namelen = strchr(v, '=') - v;
- fprintf(fp, "%.*s", namelen, v);
- writevalue(fp, v + namelen + 1);
+ if (genname) {
+ fprintf(fp, "name");
+ writevalue(fp, name);
+ }
+ for (i = 0; i < genoptions; i++) {
+ register char const *v = genoption[i];
+ register int namelen = strchr(v, '=') - v;
+ fprintf(fp, "%.*s", namelen, v);
+ writevalue(fp, v + namelen + 1);
+ }
+ fprintf(fp, "\n%s\n", string);
}
if (ferror(fp) || fclose(fp)) {
(void) fprintf(stderr, _("%s: Error writing %s\n"),
--
1.8.3.1
More information about the tz
mailing list