summaryrefslogtreecommitdiffstats
path: root/libc
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-11-11 14:10:51 -0800
committerElliott Hughes <enh@google.com>2014-11-11 19:55:35 -0800
commit371dcc189f62dbf5bc861aed41754a0ef1008ee5 (patch)
treeda093a60b80e48b7ac8e2eb575207598e964ee1b /libc
parent9d3382d97a2cdc8c8f78c7825ece16f09292fc36 (diff)
downloadbionic-371dcc189f62dbf5bc861aed41754a0ef1008ee5.zip
bionic-371dcc189f62dbf5bc861aed41754a0ef1008ee5.tar.gz
bionic-371dcc189f62dbf5bc861aed41754a0ef1008ee5.tar.bz2
Fix tzdata update tools for 'backzone'.
To maintain the status quo, we need to pull in backzone file. This file can't be built on its own, so the easiest fix is to give zic(1) all the files at once. We also now have a situation where we have links to links, so we need to dereference them until we find actual data. Bug: 18330681 (cherry picked from commit 2c2463bd3065f0a5fef34a47e3eb94aad64b0cea) Change-Id: I654b80518a7144038d8b3ea7223f49e2b1d2ad13
Diffstat (limited to 'libc')
-rw-r--r--libc/tools/zoneinfo/ZoneCompactor.java10
-rwxr-xr-xlibc/tools/zoneinfo/update-tzdata.py22
2 files changed, 21 insertions, 11 deletions
diff --git a/libc/tools/zoneinfo/ZoneCompactor.java b/libc/tools/zoneinfo/ZoneCompactor.java
index bf3153e..2d598fe 100644
--- a/libc/tools/zoneinfo/ZoneCompactor.java
+++ b/libc/tools/zoneinfo/ZoneCompactor.java
@@ -132,9 +132,15 @@ public class ZoneCompactor {
throw new RuntimeException("zone filename too long: " + zoneName.length());
}
+ // Follow the chain of links to work out where the real data for this zone lives.
+ String actualZoneName = zoneName;
+ while (links.get(actualZoneName) != null) {
+ actualZoneName = links.get(actualZoneName);
+ }
+
f.write(toAscii(new byte[MAXNAME], zoneName));
- f.writeInt(offsets.get(zoneName));
- f.writeInt(lengths.get(zoneName));
+ f.writeInt(offsets.get(actualZoneName));
+ f.writeInt(lengths.get(actualZoneName));
f.writeInt(0); // Used to be raw GMT offset. No longer used.
}
diff --git a/libc/tools/zoneinfo/update-tzdata.py b/libc/tools/zoneinfo/update-tzdata.py
index f5681be..330f166 100755
--- a/libc/tools/zoneinfo/update-tzdata.py
+++ b/libc/tools/zoneinfo/update-tzdata.py
@@ -13,8 +13,11 @@ import sys
import tarfile
import tempfile
-regions = ['africa', 'antarctica', 'asia', 'australasia', 'backward',
- 'etcetera', 'europe', 'northamerica', 'southamerica']
+regions = ['africa', 'antarctica', 'asia', 'australasia',
+ 'etcetera', 'europe', 'northamerica', 'southamerica',
+ # These two deliberately come last so they override what came
+ # before (and each other).
+ 'backward', 'backzone' ]
def CheckDirExists(dir, dirname):
if not os.path.isdir(dir):
@@ -49,16 +52,16 @@ def WriteSetupFile():
fields = line.split()
if fields:
if fields[0] == 'Link':
- links.append('%s %s %s\n' % (fields[0], fields[1], fields[2]))
+ links.append('%s %s %s' % (fields[0], fields[1], fields[2]))
zones.append(fields[2])
elif fields[0] == 'Zone':
zones.append(fields[1])
zones.sort()
setup = open('setup', 'w')
- for link in links:
- setup.write(link)
- for zone in zones:
+ for link in sorted(set(links)):
+ setup.write('%s\n' % link)
+ for zone in sorted(set(zones)):
setup.write('%s\n' % zone)
setup.close()
@@ -165,9 +168,10 @@ def BuildBionicToolsAndData(data_filename):
print 'Calling zic(1)...'
os.mkdir('data')
- for region in regions:
- if region != 'backward':
- subprocess.check_call(['zic', '-d', 'data', 'extracted/%s' % region])
+ zic_inputs = [ 'extracted/%s' % x for x in regions ]
+ zic_cmd = ['zic', '-d', 'data' ]
+ zic_cmd.extend(zic_inputs)
+ subprocess.check_call(zic_cmd)
WriteSetupFile()