Next: , Up: Sparse Formats


C.0.1 Old GNU Format

The format introduced some time around 1990 (v. 1.09). It was designed on top of standard ustar headers in such an unfortunate way that some of its fields overwrote fields required by POSIX.

An old GNU sparse header is designated by type ‘S’ (GNUTYPE_SPARSE) and has the following layout:

Offset Size Name Data type Contents
0 345 N/A Not used.
345 12 atime Number atime of the file.
357 12 ctime Number ctime of the file .
369 12 offset Number For multivolume archives: the offset of the start of this volume.
381 4 N/A Not used.
385 1 N/A Not used.
386 96 sp sparse_header (4 entries) File map.
482 1 isextended Bool 1 if an extension sparse header follows, 0 otherwise.
483 12 realsize Number Real size of the file.

Each of sparse_header object at offset 386 describes a single data chunk. It has the following structure:

Offset Size Data type Contents
0 12 Number Offset of the beginning of the chunk.
12 12 Number Size of the chunk.

If the member contains more than four chunks, the isextended field of the header has the value 1 and the main header is followed by one or more extension headers. Each such header has the following structure:

Offset Size Name Data type Contents
0 21 sp sparse_header (21 entires) File map.
504 1 isextended Bool 1 if an extension sparse header follows, or 0 otherwise.

A header with isextended=0 ends the map.