    001/*
    002 * Licensed to the Apache Software Foundation (ASF) under one
    003 * or more contributor license agreements.  See the NOTICE file
    004 * distributed with this work for additional information
    005 * regarding copyright ownership.  The ASF licenses this file
    006 * to you under the Apache License, Version 2.0 (the
    007 * "License"); you may not use this file except in compliance
    008 * with the License.  You may obtain a copy of the License at
    009 *
    010 * http://www.apache.org/licenses/LICENSE-2.0
    011 *
    012 * Unless required by applicable law or agreed to in writing,
    013 * software distributed under the License is distributed on an
    014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    015 * KIND, either express or implied.  See the License for the
    016 * specific language governing permissions and limitations
    017 * under the License.
    018 */
    019package org.apache.commons.compress.archivers.tar;
    020
    021/**
    022 * This interface contains all the definitions used in the package.
    023 *
    024 * For tar formats (FORMAT_OLDGNU, FORMAT_POSIX, etc.) see GNU tar
    025 * <I>tar.h</I> type <I>enum archive_format</I>
    026 */
    027// CheckStyle:InterfaceIsTypeCheck OFF (bc)
    028public interface TarConstants {
    029
    030    /** Default record size */
    031    int DEFAULT_RCDSIZE = 512;
    032
    033    /** Default block size */
    034    int DEFAULT_BLKSIZE = DEFAULT_RCDSIZE * 20;
    035
    036    /**
    037     * GNU format as per before tar 1.12.
    038     */
    039    int    FORMAT_OLDGNU = 2;
    040
    041    /**
    042     * Pure Posix format.
    043     */
    044    int    FORMAT_POSIX = 3;
    045
    046    /**
    047     * xstar format used by Jörg Schilling's star.
    048     */
    049    int    FORMAT_XSTAR = 4;
    050
    051    /**
    052     * The length of the name field in a header buffer.
    053     */
    054    int    NAMELEN = 100;
    055
    056    /**
    057     * The length of the mode field in a header buffer.
    058     */
    059    int    MODELEN = 8;
    060
    061    /**
    062     * The length of the user id field in a header buffer.
    063     */
    064    int    UIDLEN = 8;
    065
    066    /**
    067     * The length of the group id field in a header buffer.
    068     */
    069    int    GIDLEN = 8;
    070
    071    /**
    072     * The maximum value of gid/uid in a tar archive which can
    073     * be expressed in octal char notation (that's 7 sevens, octal).
    074     */
    075    long    MAXID = 07777777L;
    076
    077    /**
    078     * The length of the checksum field in a header buffer.
    079     */
    080    int    CHKSUMLEN = 8;
    081
    082    /**
    083     * Offset of the checksum field within header record.
    084     * @since 1.5
    085     */
    086    int    CHKSUM_OFFSET = 148;
    087
    088    /**
    089     * The length of the size field in a header buffer.
    090     * Includes the trailing space or NUL.
    091     */
    092    int    SIZELEN = 12;
    093
    094    /**
    095     * The maximum size of a file in a tar archive
    096     * which can be expressed in octal char notation (that's 11 sevens, octal).
    097     */
    098    long   MAXSIZE = 077777777777L;
    099
    100    /** Offset of start of magic field within header record */
    101    int    MAGIC_OFFSET = 257;
    102    /**
    103     * The length of the magic field in a header buffer.
    104     */
    105    int    MAGICLEN = 6;
    106
    107    /** Offset of start of magic field within header record */
    108    int    VERSION_OFFSET = 263;
    109    /**
    110     * Previously this was regarded as part of "magic" field, but it is separate.
    111     */
    112    int    VERSIONLEN = 2;
    113
    114    /**
    115     * The length of the modification time field in a header buffer.
    116     */
    117    int    MODTIMELEN = 12;
    118
    119    /**
    120     * The length of the user name field in a header buffer.
    121     */
    122    int    UNAMELEN = 32;
    123
    124    /**
    125     * The length of the group name field in a header buffer.
    126     */
    127    int    GNAMELEN = 32;
    128
    129    /**
    130     * The length of each of the device fields (major and minor) in a header buffer.
    131     */
    132    int    DEVLEN = 8;
    133
    134    /**
    135     * Length of the prefix field.
    136     *
    137     */
    138    int    PREFIXLEN = 155;
    139
    140    /**
    141     * The length of the access time field in an old GNU header buffer.
    142     *
    143     */
    144    int    ATIMELEN_GNU = 12;
    145
    146    /**
    147     * The length of the created time field in an old GNU header buffer.
    148     *
    149     */
    150    int    CTIMELEN_GNU = 12;
    151
    152    /**
    153     * The length of the multivolume start offset field in an old GNU header buffer.
    154     *
    155     */
    156    int    OFFSETLEN_GNU = 12;
    157
    158    /**
    159     * The length of the long names field in an old GNU header buffer.
    160     *
    161     */
    162    int    LONGNAMESLEN_GNU = 4;
    163
    164    /**
    165     * The length of the padding field in an old GNU header buffer.
    166     *
    167     */
    168    int    PAD2LEN_GNU = 1;
    169
    170    /**
    171     * The sum of the length of all sparse headers in an old GNU header buffer.
    172     *
    173     */
    174    int    SPARSELEN_GNU = 96;
    175
    176    /**
    177     * The length of the is extension field in an old GNU header buffer.
    178     *
    179     */
    180    int    ISEXTENDEDLEN_GNU = 1;
    181
    182    /**
    183     * The length of the real size field in an old GNU header buffer.
    184     *
    185     */
    186    int    REALSIZELEN_GNU = 12;
    187
    188    /**
    189     * The length of offset in struct sparse
    190     * @since 1.20
    191     */
    192    int    SPARSE_OFFSET_LEN = 12;
    193
    194    /**
    195     * The length of numbytes in struct sparse
    196     * @since 1.20
    197     */
    198    int    SPARSE_NUMBYTES_LEN = 12;
    199
    200    /**
    201     *  The number of sparse headers in an old GNU header
    202     * @since 1.20
    203     */
    204    int    SPARSE_HEADERS_IN_OLDGNU_HEADER = 4;
    205
    206    /**
    207     *  The number of sparse headers in an extension header
    208     * @since 1.20
    209     */
    210    int    SPARSE_HEADERS_IN_EXTENSION_HEADER = 21;
    211
    212    /**
    213     * The sum of the length of all sparse headers in a sparse header buffer.
    214     *
    215     */
    216    int    SPARSELEN_GNU_SPARSE = 504;
    217
    218    /**
    219     * The length of the is extension field in a sparse header buffer.
    220     *
    221     */
    222    int    ISEXTENDEDLEN_GNU_SPARSE = 1;
    223
    224    /**
    225     * LF_ constants represent the "link flag" of an entry, or more commonly,
    226     * the "entry type". This is the "old way" of indicating a normal file.
    227     */
    228    byte   LF_OLDNORM = 0;
    229
    230    /**
    231     * Normal file type.
    232     */
    233    byte   LF_NORMAL = (byte) '0';
    234
    235    /**
    236     * Link file type.
    237     */
    238    byte   LF_LINK = (byte) '1';
    239
    240    /**
    241     * Symbolic link file type.
    242     */
    243    byte   LF_SYMLINK = (byte) '2';
    244
    245    /**
    246     * Character device file type.
    247     */
    248    byte   LF_CHR = (byte) '3';
    249
    250    /**
    251     * Block device file type.
    252     */
    253    byte   LF_BLK = (byte) '4';
    254
    255    /**
    256     * Directory file type.
    257     */
    258    byte   LF_DIR = (byte) '5';
    259
    260    /**
    261     * FIFO (pipe) file type.
    262     */
    263    byte   LF_FIFO = (byte) '6';
    264
    265    /**
    266     * Contiguous file type.
    267     */
    268    byte   LF_CONTIG = (byte) '7';
    269
    270    /**
    271     * Identifies the *next* file on the tape as having a long linkname.
    272     */
    273    byte LF_GNUTYPE_LONGLINK = (byte) 'K';
    274
    275    /**
    276     * Identifies the *next* file on the tape as having a long name.
    277     */
    278    byte LF_GNUTYPE_LONGNAME = (byte) 'L';
    279
    280    /**
    281     * Sparse file type.
    282     * @since 1.1.1
    283     */
    284    byte LF_GNUTYPE_SPARSE = (byte) 'S';
    285
    286    // See "http://www.opengroup.org/onlinepubs/009695399/utilities/pax.html#tag_04_100_13_02"
    287
    288    /**
    289     * Identifies the entry as a Pax extended header.
    290     * @since 1.1
    291     */
    292    byte LF_PAX_EXTENDED_HEADER_LC = (byte) 'x';
    293
    294    /**
    295     * Identifies the entry as a Pax extended header (SunOS tar -E).
    296     *
    297     * @since 1.1
    298     */
    299    byte LF_PAX_EXTENDED_HEADER_UC = (byte) 'X';
    300
    301    /**
    302     * Identifies the entry as a Pax global extended header.
    303     *
    304     * @since 1.1
    305     */
    306    byte LF_PAX_GLOBAL_EXTENDED_HEADER = (byte) 'g';
    307
    308    /**
    309     * The magic tag representing a POSIX tar archive.
    310     */
    311    String MAGIC_POSIX = "ustar\0";
    312    String VERSION_POSIX = "00";
    313
    314    /**
    315     * The magic tag representing a GNU tar archive.
    316     */
    317    String MAGIC_GNU = "ustar ";
    318    // Appear to be two possible GNU versions
    319    String VERSION_GNU_SPACE = " \0";
    320    String VERSION_GNU_ZERO  = "0\0";
    321
    322    /**
    323     * The magic tag representing an Ant tar archive.
    324     *
    325     * @since 1.1
    326     */
    327    String MAGIC_ANT = "ustar\0";
    328
    329    /**
    330     * The "version" representing an Ant tar archive.
    331     *
    332     * @since 1.1
    333     */
    334    // Does not appear to have a version, however Ant does write 8 bytes,
    335    // so assume the version is 2 nulls
    336    String VERSION_ANT = "\0\0";
    337
    338    /**
    339     * The name of the GNU tar entry which contains a long name.
    340     */
    341    String GNU_LONGLINK = "././@LongLink"; // TODO rename as LONGLINK_GNU ?
    342
    343    /**
    344     * The magix string used in the last four bytes of the header to
    345     * identify the xstar format.
    346     * @since 1.11
    347     */
    348    String MAGIC_XSTAR = "tar\0";
    349
    350    /**
    351     * Offset inside the header for the xstar magic bytes.
    352     * @since 1.11
    353     */
    354    int XSTAR_MAGIC_OFFSET = 508;
    355
    356    /**
    357     * Length of the XSTAR magic.
    358     * @since 1.11
    359     */
    360    int XSTAR_MAGIC_LEN = 4;
    361
    362    /**
    363     * Length of the prefix field in xstar archives.
    364     *
    365     * @since 1.11
    366     */
    367    int PREFIXLEN_XSTAR = 131;
    368
    369    /**
    370     * The length of the access time field in a xstar header buffer.
    371     *
    372     * @since 1.11
    373     */
    374    int ATIMELEN_XSTAR = 12;
    375
    376    /**
    377     * The length of the created time field in a xstar header buffer.
    378     *
    379     * @since 1.11
    380     */
    381    int CTIMELEN_XSTAR = 12;
    382}