X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Ftar;a=blobdiff_plain;f=src%2Ftar.h;h=cb7d70cf62534c268b5e1b04f85d985ae6e78f31;hp=4595bd67295f78b23a698913796ef3f3b3a1ec39;hb=45ccda119355a1087450039a250359c1d0de0d08;hpb=ca14885884b5ca211624809e1e8539ec5a028b10 diff --git a/src/tar.h b/src/tar.h index 4595bd6..cb7d70c 100644 --- a/src/tar.h +++ b/src/tar.h @@ -1,21 +1,22 @@ /* GNU tar Archive Format description. - Copyright (C) 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, - 2000, 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright 1988-1989, 1991-1997, 2000-2001, 2003-2007, 2012-2014 Free + Software Foundation, Inc. - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any later - version. + This file is part of GNU tar. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General - Public License for more details. + GNU tar is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + GNU tar is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ /* tar Header Block, from POSIX 1003.1-1990. */ @@ -80,9 +81,9 @@ struct posix_header /* tar Header Block, GNU extensions. */ /* In GNU tar, SYMTYPE is for to symbolic links, and CONTTYPE is for - contiguous files, so maybe disobeying the `reserved' comment in POSIX + contiguous files, so maybe disobeying the "reserved" comment in POSIX header description. I suspect these were meant to be used this way, and - should not have really been `reserved' in the published standards. */ + should not have really been "reserved" in the published standards. */ /* *BEWARE* *BEWARE* *BEWARE* that the following information is still boiling, and may change. Even if the OLDGNU format description should be @@ -165,6 +166,7 @@ struct oldgnu_header 'A' Solaris Access Control List 'E' Solaris Extended Attribute File 'I' Inode only, as in 'star' + 'N' Obsolete GNU tar, for file names that do not fit into the main header. 'X' POSIX 1003.1-2001 eXtended (VU version) */ /* This is a dir entry that contains the names of files that were in the @@ -180,9 +182,6 @@ struct oldgnu_header /* This is the continuation of a file that began on another volume. */ #define GNUTYPE_MULTIVOL 'M' -/* For storing filenames that do not fit into the main header. */ -#define GNUTYPE_NAMES 'N' - /* This is for sparse files. */ #define GNUTYPE_SPARSE 'S' @@ -267,9 +266,25 @@ enum archive_format struct sp_array { off_t offset; - size_t numbytes; + off_t numbytes; +}; + +struct xheader +{ + struct obstack *stk; + size_t size; + char *buffer; + uintmax_t string_length; }; +/* Information about xattrs for a file. */ +struct xattr_array + { + char *xkey; + char *xval_ptr; + size_t xval_len; + }; + struct tar_stat_info { char *orig_file_name; /* name of file read from the archive header */ @@ -281,6 +296,15 @@ struct tar_stat_info char *uname; /* user name of owner */ char *gname; /* group name of owner */ + + char *cntx_name; /* SELinux context for the current archive entry. */ + + char *acls_a_ptr; /* Access ACLs for the current archive entry. */ + size_t acls_a_len; /* Access ACLs for the current archive entry. */ + + char *acls_d_ptr; /* Default ACLs for the current archive entry. */ + size_t acls_d_len; /* Default ACLs for the current archive entry. */ + struct stat stat; /* regular filesystem stat */ /* STAT doesn't always have access, data modification, and status @@ -303,11 +327,37 @@ struct tar_stat_info size_t sparse_map_size; /* Size of the sparse map */ struct sp_array *sparse_map; + size_t xattr_map_size; /* Size of the xattr map */ + struct xattr_array *xattr_map; + + /* Extended headers */ + struct xheader xhdr; + /* For dumpdirs */ bool is_dumpdir; /* Is the member a dumpdir? */ bool skipped; /* The member contents is already read (for GNUTYPE_DUMPDIR) */ char *dumpdir; /* Contents of the dump directory */ + + /* Parent directory, if creating an archive. This is null if the + file is at the top level. */ + struct tar_stat_info *parent; + + /* Directory stream. If this is not null, it is in control of FD, + and should be closed instead of FD. */ + DIR *dirstream; + + /* File descriptor, if creating an archive, and if a directory or a + regular file or a contiguous file. + + It is zero if no file descriptor is available, either because it + was never needed or because it was open and then closed to + conserve on file descriptors. (Standard input is never used + here, so zero cannot be a valid file descriptor.) + + It is negative if it could not be reopened after it was closed. + Negate it to find out what errno was when the reopen failed. */ + int fd; }; union block