Changeset fd9f85cc0d9b…
Parent 4e6388232ec3…
by
Changes to one file · Browse files at fd9f85cc0d9b Showing diff from parent 4e6388232ec3 Diff from another changeset...
@@ -618,7 +618,6 @@ self._pack_offset_largetable_offset = (self._pack_offset_table_offset +
4 * len(self))
-
def _unpack_entry(self, i):
return (self._unpack_name(i), self._unpack_offset(i),
self._unpack_crc32_checksum(i))
@@ -1567,6 +1566,7 @@ f.write(struct.pack('>L', fan_out_table[i]))
fan_out_table[i+1] += fan_out_table[i]
for (name, offset, entry_checksum) in entries:
+ assert offset <= 0xffffffff
f.write(struct.pack('>L20s', offset, name))
assert len(pack_checksum) == 20
f.write(pack_checksum)
@@ -1714,6 +1714,7 @@ for (name, offset, entry_checksum) in entries:
fan_out_table[ord(name[0])] += 1
# Fan-out table
+ largetable = []
for i in range(0x100):
f.write(struct.pack('>L', fan_out_table[i]))
fan_out_table[i+1] += fan_out_table[i]
@@ -1722,9 +1723,13 @@ for (name, offset, entry_checksum) in entries:
f.write(struct.pack('>L', entry_checksum))
for (name, offset, entry_checksum) in entries:
- # FIXME: handle if MSBit is set in offset
- f.write(struct.pack('>L', offset))
- # FIXME: handle table for pack files > 8 Gb
+ if offset < 0x80000000:
+ f.write(struct.pack('>L', offset))
+ else:
+ f.write(struct.pack('>L', 0x80000000 + len(largetable)))
+ largetable.append(offset)
+ for offset in largetable:
+ f.write(struct.pack('>Q', offset))
assert len(pack_checksum) == 20
f.write(pack_checksum)
return f.write_sha()
|
Loading...