struct oldgnu_header
{ /* byte offset */
char unused_pad1[345]; /* 0 */
- char atime[12]; /* 345 */
- char ctime[12]; /* 357 */
- char offset[12]; /* 369 */
- char longnames[4]; /* 381 */
+ char atime[12]; /* 345 Incr. archive: atime of the file */
+ char ctime[12]; /* 357 Incr. archive: ctime of the file */
+ char offset[12]; /* 369 Multivolume archive: the offset of
+ the start of this volume */
+ char longnames[4]; /* 381 Not used */
char unused_pad2; /* 385 */
struct sparse sp[SPARSES_IN_OLDGNU_HEADER];
/* 386 */
- char isextended; /* 482 */
- char realsize[12]; /* 483 */
+ char isextended; /* 482 Sparse file: Extension sparse header
+ follows */
+ char realsize[12]; /* 483 Sparse file: Real size*/
/* 495 */
};
GNU_FORMAT /* POSIX format with GNU extensions */
};
+/* Information about a sparse file. */
+struct sp_array
+ {
+ off_t offset;
+ size_t numbytes;
+ };
+
struct tar_stat_info
{
char *orig_file_name; /* name of file read from the archive header */
unsigned int devmajor; /* device major number */
char *uname; /* user name of owner */
char *gname; /* group name of owner */
- struct stat stat; /* regular filesystem stat */
+ struct stat stat; /* regular filesystem stat */
+
+ off_t archive_file_size; /* Size of file as stored in the archive.
+ Equals stat.st_size for non-sparse files */
+
+ size_t sparse_map_avail; /* Index to the first unused element in
+ sparse_map array. Zero if the file is
+ not sparse */
+ size_t sparse_map_size; /* Size of the sparse map */
+ struct sp_array *sparse_map;
};
union block