(decode_header): Added initial support for POSIX extended

and STAR headers.
(skip_member): Check oldgnu_header only if current_format is set
to OLDGNU_FORMAT
This commit is contained in:
Sergey Poznyakoff
2003-08-31 22:38:55 +00:00
parent 4e59b9d7e3
commit 450636adfa

View File

@@ -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;