|
@@ -53,6 +53,29 @@ struct posix_header
|
|
|
/* 500 */
|
|
|
};
|
|
|
|
|
|
+struct star_header
|
|
|
+{ /* byte offset */
|
|
|
+ char name[100]; /* 0 */
|
|
|
+ char mode[8]; /* 100 */
|
|
|
+ char uid[8]; /* 108 */
|
|
|
+ char gid[8]; /* 116 */
|
|
|
+ char size[12]; /* 124 */
|
|
|
+ char mtime[12]; /* 136 */
|
|
|
+ char chksum[8]; /* 148 */
|
|
|
+ char typeflag; /* 156 */
|
|
|
+ char linkname[100]; /* 157 */
|
|
|
+ char magic[6]; /* 257 */
|
|
|
+ char version[2]; /* 263 */
|
|
|
+ char uname[32]; /* 265 */
|
|
|
+ char gname[32]; /* 297 */
|
|
|
+ char devmajor[8]; /* 329 */
|
|
|
+ char devminor[8]; /* 337 */
|
|
|
+ char prefix[131]; /* 345 */
|
|
|
+ char atime[12]; /* 476 */
|
|
|
+ char ctime[12]; /* 488 */
|
|
|
+ /* 500 */
|
|
|
+};
|
|
|
+
|
|
|
#define TMAGIC "ustar" /* ustar and a null */
|
|
|
#define TMAGLEN 6
|
|
|
#define TVERSION "00" /* 00 and no null */
|
|
@@ -69,6 +92,10 @@ struct posix_header
|
|
|
#define FIFOTYPE '6' /* FIFO special */
|
|
|
#define CONTTYPE '7' /* reserved */
|
|
|
|
|
|
+#define XHDTYPE 'x' /* Extended header referring to the
|
|
|
+ next file in the archive */
|
|
|
+#define XGLTYPE 'g' /* Global extended header */
|
|
|
+
|
|
|
/* Bits used in the mode field, values in octal. */
|
|
|
#define TSUID 04000 /* set UID on execution */
|
|
|
#define TSGID 02000 /* set GID on execution */
|
|
@@ -225,13 +252,31 @@ enum archive_format
|
|
|
V7_FORMAT, /* old V7 tar format */
|
|
|
OLDGNU_FORMAT, /* GNU format as per before tar 1.12 */
|
|
|
POSIX_FORMAT, /* restricted, pure POSIX format */
|
|
|
+ STAR_FORMAT, /* Star format defined in 1994 */
|
|
|
GNU_FORMAT /* POSIX format with GNU extensions */
|
|
|
};
|
|
|
|
|
|
+struct tar_stat_info
|
|
|
+{
|
|
|
+ char *orig_file_name; /* name of file read from the archive header */
|
|
|
+ char *file_name; /* name of file for the current archive entry
|
|
|
+ after being normalized. */
|
|
|
+ int had_trailing_slash; /* nonzero if the current archive entry had a
|
|
|
+ trailing slash before it was normalized. */
|
|
|
+ char *link_name; /* name of link for the current archive entry. */
|
|
|
+
|
|
|
+ unsigned int devminor; /* device minor number */
|
|
|
+ unsigned int devmajor; /* device major number */
|
|
|
+ char *uname; /* user name of owner */
|
|
|
+ char *gname; /* group name of owner */
|
|
|
+ struct stat stat; /* regular filesystem stat */
|
|
|
+};
|
|
|
+
|
|
|
union block
|
|
|
{
|
|
|
char buffer[BLOCKSIZE];
|
|
|
struct posix_header header;
|
|
|
+ struct star_header star_header;
|
|
|
struct extra_header extra_header;
|
|
|
struct oldgnu_header oldgnu_header;
|
|
|
struct sparse_header sparse_header;
|