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    /**
031     * GNU format as per before tar 1.12.
032     */
033    int    FORMAT_OLDGNU = 2;
034
035    /**
036     * Pure Posix format.
037     */
038    int    FORMAT_POSIX = 3;
039
040    /**
041     * The length of the name field in a header buffer.
042     */
043    int    NAMELEN = 100;
044
045    /**
046     * The length of the mode field in a header buffer.
047     */
048    int    MODELEN = 8;
049
050    /**
051     * The length of the user id field in a header buffer.
052     */
053    int    UIDLEN = 8;
054
055    /**
056     * The length of the group id field in a header buffer.
057     */
058    int    GIDLEN = 8;
059
060    /**
061     * The maximum value of gid/uid in a tar archive which can
062     * be expressed in octal char notation (that's 7 sevens, octal).
063     */
064    long    MAXID = 07777777L;
065 
066    /**
067     * The length of the checksum field in a header buffer.
068     */
069    int    CHKSUMLEN = 8;
070
071    /**
072     * Offset of the checksum field within header record.
073     * @since 1.5
074     */
075    int    CHKSUM_OFFSET = 148;
076
077    /**
078     * The length of the size field in a header buffer.
079     * Includes the trailing space or NUL.
080     */
081    int    SIZELEN = 12;
082
083    /**
084     * The maximum size of a file in a tar archive 
085     * which can be expressed in octal char notation (that's 11 sevens, octal).
086     */
087    long   MAXSIZE = 077777777777L;
088
089    /** Offset of start of magic field within header record */
090    int    MAGIC_OFFSET = 257;
091    /**
092     * The length of the magic field in a header buffer.
093     */
094    int    MAGICLEN = 6;
095
096    /** Offset of start of magic field within header record */
097    int    VERSION_OFFSET = 263;
098    /**
099     * Previously this was regarded as part of "magic" field, but it is separate.
100     */
101    int    VERSIONLEN = 2;
102
103    /**
104     * The length of the modification time field in a header buffer.
105     */
106    int    MODTIMELEN = 12;
107
108    /**
109     * The length of the user name field in a header buffer.
110     */
111    int    UNAMELEN = 32;
112
113    /**
114     * The length of the group name field in a header buffer.
115     */
116    int    GNAMELEN = 32;
117
118    /**
119     * The length of each of the device fields (major and minor) in a header buffer.
120     */
121    int    DEVLEN = 8;
122
123    /**
124     * Length of the prefix field.
125     * 
126     */
127    int    PREFIXLEN = 155;
128
129    /**
130     * The length of the access time field in an old GNU header buffer.
131     * 
132     */
133    int    ATIMELEN_GNU = 12;
134
135    /**
136     * The length of the created time field in an old GNU header buffer.
137     * 
138     */
139    int    CTIMELEN_GNU = 12;
140
141    /**
142     * The length of the multivolume start offset field in an old GNU header buffer. 
143     * 
144     */
145    int    OFFSETLEN_GNU = 12;
146
147    /**
148     * The length of the long names field in an old GNU header buffer. 
149     * 
150     */
151    int    LONGNAMESLEN_GNU = 4;
152
153    /**
154     * The length of the padding field in an old GNU header buffer. 
155     * 
156     */
157    int    PAD2LEN_GNU = 1;
158
159    /**
160     * The sum of the length of all sparse headers in an old GNU header buffer. 
161     * 
162     */
163    int    SPARSELEN_GNU = 96;
164
165    /**
166     * The length of the is extension field in an old GNU header buffer. 
167     * 
168     */
169    int    ISEXTENDEDLEN_GNU = 1;
170
171    /**
172     * The length of the real size field in an old GNU header buffer. 
173     * 
174     */
175    int    REALSIZELEN_GNU = 12;
176
177    /**
178     * The sum of the length of all sparse headers in a sparse header buffer. 
179     * 
180     */
181    int    SPARSELEN_GNU_SPARSE = 504;
182
183    /**
184     * The length of the is extension field in a sparse header buffer. 
185     * 
186     */
187    int    ISEXTENDEDLEN_GNU_SPARSE = 1;
188
189    /**
190     * LF_ constants represent the "link flag" of an entry, or more commonly,
191     * the "entry type". This is the "old way" of indicating a normal file.
192     */
193    byte   LF_OLDNORM = 0;
194
195    /**
196     * Normal file type.
197     */
198    byte   LF_NORMAL = (byte) '0';
199
200    /**
201     * Link file type.
202     */
203    byte   LF_LINK = (byte) '1';
204
205    /**
206     * Symbolic link file type.
207     */
208    byte   LF_SYMLINK = (byte) '2';
209
210    /**
211     * Character device file type.
212     */
213    byte   LF_CHR = (byte) '3';
214
215    /**
216     * Block device file type.
217     */
218    byte   LF_BLK = (byte) '4';
219
220    /**
221     * Directory file type.
222     */
223    byte   LF_DIR = (byte) '5';
224
225    /**
226     * FIFO (pipe) file type.
227     */
228    byte   LF_FIFO = (byte) '6';
229
230    /**
231     * Contiguous file type.
232     */
233    byte   LF_CONTIG = (byte) '7';
234
235    /**
236     * Identifies the *next* file on the tape as having a long name.
237     */
238    byte LF_GNUTYPE_LONGNAME = (byte) 'L';
239
240    /**
241     * Sparse file type.
242     * @since 1.1.1
243     */
244    byte LF_GNUTYPE_SPARSE = (byte) 'S';
245
246    // See "http://www.opengroup.org/onlinepubs/009695399/utilities/pax.html#tag_04_100_13_02"
247
248    /**
249     * Identifies the entry as a Pax extended header.
250     * @since 1.1
251     */
252    byte LF_PAX_EXTENDED_HEADER_LC = (byte) 'x';
253
254    /**
255     * Identifies the entry as a Pax extended header (SunOS tar -E).
256     *
257     * @since 1.1
258     */
259    byte LF_PAX_EXTENDED_HEADER_UC = (byte) 'X';
260
261    /**
262     * Identifies the entry as a Pax global extended header.
263     *
264     * @since 1.1
265     */
266    byte LF_PAX_GLOBAL_EXTENDED_HEADER = (byte) 'g';
267
268    /**
269     * The magic tag representing a POSIX tar archive.
270     */
271    String MAGIC_POSIX = "ustar\0";
272    String VERSION_POSIX = "00";
273
274    /**
275     * The magic tag representing a GNU tar archive.
276     */
277    String MAGIC_GNU = "ustar ";
278    // Appear to be two possible GNU versions
279    String VERSION_GNU_SPACE = " \0";
280    String VERSION_GNU_ZERO  = "0\0";
281
282    /**
283     * The magic tag representing an Ant tar archive.
284     *
285     * @since 1.1
286     */
287    String MAGIC_ANT = "ustar\0";
288
289    /**
290     * The "version" representing an Ant tar archive.
291     *
292     * @since 1.1
293     */
294    // Does not appear to have a version, however Ant does write 8 bytes,
295    // so assume the version is 2 nulls
296    String VERSION_ANT = "\0\0";
297
298    /**
299     * The name of the GNU tar entry which contains a long name.
300     */
301    String GNU_LONGLINK = "././@LongLink"; // TODO rename as LONGLINK_GNU ?
302
303}