Merge "Support zone.tab in bionic, and remove the file format version."
This commit is contained in:
commit
df92635a57
@ -107,7 +107,7 @@ public class ZoneCompactor {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ZoneCompactor(String setupFile, String dataDirectory, String outputDirectory, String version) throws Exception {
|
public ZoneCompactor(String setupFile, String dataDirectory, String zoneTabFile, String outputDirectory, String version) throws Exception {
|
||||||
// Read the setup file, and concatenate all the data.
|
// Read the setup file, and concatenate all the data.
|
||||||
ByteArrayOutputStream allData = new ByteArrayOutputStream();
|
ByteArrayOutputStream allData = new ByteArrayOutputStream();
|
||||||
BufferedReader reader = new BufferedReader(new FileReader(setupFile));
|
BufferedReader reader = new BufferedReader(new FileReader(setupFile));
|
||||||
@ -138,6 +138,7 @@ public class ZoneCompactor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
reader.close();
|
||||||
|
|
||||||
// Fill in fields for links.
|
// Fill in fields for links.
|
||||||
Iterator<String> it = links.keySet().iterator();
|
Iterator<String> it = links.keySet().iterator();
|
||||||
@ -157,17 +158,13 @@ public class ZoneCompactor {
|
|||||||
// Write the header.
|
// Write the header.
|
||||||
|
|
||||||
// byte[12] tzdata_version -- 'tzdata2012f\0'
|
// byte[12] tzdata_version -- 'tzdata2012f\0'
|
||||||
// int file_format_version -- probably won't need this, but just in case
|
// int index_offset -- so we can slip in extra header fields in a backwards-compatible way
|
||||||
// int index_offset -- likewise
|
|
||||||
// int data_offset
|
// int data_offset
|
||||||
// int zonetab_offset
|
// int zonetab_offset
|
||||||
|
|
||||||
// tzdata_version
|
// tzdata_version
|
||||||
f.write(toAscii(new byte[12], version));
|
f.write(toAscii(new byte[12], version));
|
||||||
|
|
||||||
// file_format_version
|
|
||||||
f.writeInt(1);
|
|
||||||
|
|
||||||
// Write dummy values for the three offsets, and remember where we need to seek back to later
|
// Write dummy values for the three offsets, and remember where we need to seek back to later
|
||||||
// when we have the real values.
|
// when we have the real values.
|
||||||
int index_offset_offset = (int) f.getFilePointer();
|
int index_offset_offset = (int) f.getFilePointer();
|
||||||
@ -201,8 +198,17 @@ public class ZoneCompactor {
|
|||||||
// Write the data.
|
// Write the data.
|
||||||
f.write(allData.toByteArray());
|
f.write(allData.toByteArray());
|
||||||
|
|
||||||
// TODO: append the zonetab.
|
// Copy the zone.tab.
|
||||||
int zonetab_offset = 0;
|
reader = new BufferedReader(new FileReader(zoneTabFile));
|
||||||
|
while ((s = reader.readLine()) != null) {
|
||||||
|
if (!s.startsWith("#")) {
|
||||||
|
f.writeBytes(s);
|
||||||
|
f.write('\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reader.close();
|
||||||
|
|
||||||
|
int zonetab_offset = (int) f.getFilePointer();
|
||||||
|
|
||||||
// Go back and fix up the offsets in the header.
|
// Go back and fix up the offsets in the header.
|
||||||
f.seek(index_offset_offset);
|
f.seek(index_offset_offset);
|
||||||
@ -226,10 +232,10 @@ public class ZoneCompactor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
if (args.length != 4) {
|
if (args.length != 5) {
|
||||||
System.err.println("usage: java ZoneCompactor <setup file> <data directory> <output directory> <tzdata version>");
|
System.err.println("usage: java ZoneCompactor <setup file> <data directory> <zone.tab file> <output directory> <tzdata version>");
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
new ZoneCompactor(args[0], args[1], args[2], args[3]);
|
new ZoneCompactor(args[0], args[1], args[2], args[3], args[4]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,8 @@ def UpgradeTo(ftp, filename):
|
|||||||
'%s/libcore/util/ZoneInfo.java' % libcore_src_dir,
|
'%s/libcore/util/ZoneInfo.java' % libcore_src_dir,
|
||||||
'%s/libcore/io/BufferIterator.java' % libcore_src_dir])
|
'%s/libcore/io/BufferIterator.java' % libcore_src_dir])
|
||||||
subprocess.check_call(['java', 'ZoneCompactor',
|
subprocess.check_call(['java', 'ZoneCompactor',
|
||||||
'setup', 'data', bionic_libc_zoneinfo_dir, new_version])
|
'setup', 'data', 'extracted/zone.tab',
|
||||||
|
bionic_libc_zoneinfo_dir, new_version])
|
||||||
|
|
||||||
|
|
||||||
# Run with no arguments from any directory, with no special setup required.
|
# Run with no arguments from any directory, with no special setup required.
|
||||||
|
@ -2247,13 +2247,11 @@ static int __bionic_open_tzdata_path(const char* path, const char* olson_id, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
// byte[12] tzdata_version -- "tzdata2012f\0"
|
// byte[12] tzdata_version -- "tzdata2012f\0"
|
||||||
// int file_format_version -- 1
|
|
||||||
// int index_offset
|
// int index_offset
|
||||||
// int data_offset
|
// int data_offset
|
||||||
// int zonetab_offset
|
// int zonetab_offset
|
||||||
struct bionic_tzdata_header {
|
struct bionic_tzdata_header {
|
||||||
char tzdata_version[12];
|
char tzdata_version[12];
|
||||||
int32_t file_format_version;
|
|
||||||
int32_t index_offset;
|
int32_t index_offset;
|
||||||
int32_t data_offset;
|
int32_t data_offset;
|
||||||
int32_t zonetab_offset;
|
int32_t zonetab_offset;
|
||||||
@ -2269,14 +2267,9 @@ static int __bionic_open_tzdata_path(const char* path, const char* olson_id, int
|
|||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (ntohl(header.file_format_version) != 1) {
|
|
||||||
fprintf(stderr, "%s: bad file format version: %d\n", __FUNCTION__, header.file_format_version);
|
|
||||||
close(fd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
fprintf(stderr, "version: %s (%d)\n", header.tzdata_version, ntohl(header.file_format_version));
|
fprintf(stderr, "version: %s\n", header.tzdata_version);
|
||||||
fprintf(stderr, "index_offset = %d\n", ntohl(header.index_offset));
|
fprintf(stderr, "index_offset = %d\n", ntohl(header.index_offset));
|
||||||
fprintf(stderr, "data_offset = %d\n", ntohl(header.data_offset));
|
fprintf(stderr, "data_offset = %d\n", ntohl(header.data_offset));
|
||||||
fprintf(stderr, "zonetab_offset = %d\n", ntohl(header.zonetab_offset));
|
fprintf(stderr, "zonetab_offset = %d\n", ntohl(header.zonetab_offset));
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user