Browse Source

(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

Sergey Poznyakoff 21 years ago
parent
commit
450636adfa
1 changed files with 45 additions and 0 deletions
  1. 45 0
      src/tar.h

+ 45 - 0
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;