Old GNU Format (GNU tar 1.35)

#### Old GNU Format

The format introduced in November 1990 (v. 1.09) 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 entries) File map.
504 | 1 | isextended | Bool | `1` if an extension sparse header follows, or `0` otherwise.

A header with `isextended=0` ends the map.