From: Sergey Poznyakoff Date: Sun, 31 Aug 2003 22:38:55 +0000 (+0000) Subject: (decode_header): Added initial support for POSIX extended X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=450636adfad8125dc0eb7c47dc820a93f23134ef;p=chaz%2Ftar (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 --- diff --git a/src/tar.h b/src/tar.h index e514363..5aa0a48 100644 --- a/src/tar.h +++ b/src/tar.h @@ -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;