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 be expressed in octal char notation (that's 7 sevens, octal).
073     */
074    long MAXID = 07777777L;
075
076    /**
077     * The length of the checksum field in a header buffer.
078     */
079    int CHKSUMLEN = 8;
080
081    /**
082     * Offset of the checksum field within header record.
083     *
084     * @since 1.5
085     */
086    int CHKSUM_OFFSET = 148;
087
088    /**
089     * The length of the size field in a header buffer. Includes the trailing space or NUL.
090     */
091    int SIZELEN = 12;
092
093    /**
094     * The maximum size of a file in a tar archive which can be expressed in octal char notation (that's 11 sevens, octal).
095     */
096    long MAXSIZE = 077777777777L;
097
098    /** Offset of start of magic field within header record */
099    int MAGIC_OFFSET = 257;
100    /**
101     * The length of the magic field in a header buffer.
102     */
103    int MAGICLEN = 6;
104
105    /** Offset of start of magic field within header record */
106    int VERSION_OFFSET = 263;
107    /**
108     * Previously this was regarded as part of "magic" field, but it is separate.
109     */
110    int VERSIONLEN = 2;
111
112    /**
113     * The length of the modification time field in a header buffer.
114     */
115    int MODTIMELEN = 12;
116
117    /**
118     * The length of the user name field in a header buffer.
119     */
120    int UNAMELEN = 32;
121
122    /**
123     * The length of the group name field in a header buffer.
124     */
125    int GNAMELEN = 32;
126
127    /**
128     * The length of each of the device fields (major and minor) in a header buffer.
129     */
130    int DEVLEN = 8;
131
132    /**
133     * Length of the prefix field.
134     *
135     */
136    int PREFIXLEN = 155;
137
138    /**
139     * The length of the access time field in an old GNU header buffer.
140     *
141     */
142    int ATIMELEN_GNU = 12;
143
144    /**
145     * The length of the created time field in an old GNU header buffer.
146     *
147     */
148    int CTIMELEN_GNU = 12;
149
150    /**
151     * The length of the multivolume start offset field in an old GNU header buffer.
152     *
153     */
154    int OFFSETLEN_GNU = 12;
155
156    /**
157     * The length of the long names field in an old GNU header buffer.
158     *
159     */
160    int LONGNAMESLEN_GNU = 4;
161
162    /**
163     * The length of the padding field in an old GNU header buffer.
164     *
165     */
166    int PAD2LEN_GNU = 1;
167
168    /**
169     * The sum of the length of all sparse headers in an old GNU header buffer.
170     *
171     */
172    int SPARSELEN_GNU = 96;
173
174    /**
175     * The length of the is extension field in an old GNU header buffer.
176     *
177     */
178    int ISEXTENDEDLEN_GNU = 1;
179
180    /**
181     * The length of the real size field in an old GNU header buffer.
182     *
183     */
184    int REALSIZELEN_GNU = 12;
185
186    /**
187     * The length of offset in struct sparse
188     *
189     * @since 1.20
190     */
191    int SPARSE_OFFSET_LEN = 12;
192
193    /**
194     * The length of numbytes in struct sparse
195     *
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     *
203     * @since 1.20
204     */
205    int SPARSE_HEADERS_IN_OLDGNU_HEADER = 4;
206
207    /**
208     * The number of sparse headers in an extension header
209     *
210     * @since 1.20
211     */
212    int SPARSE_HEADERS_IN_EXTENSION_HEADER = 21;
213
214    /**
215     * The sum of the length of all sparse headers in a sparse header buffer.
216     *
217     */
218    int SPARSELEN_GNU_SPARSE = 504;
219
220    /**
221     * The length of the is extension field in a sparse header buffer.
222     *
223     */
224    int ISEXTENDEDLEN_GNU_SPARSE = 1;
225
226    /**
227     * LF_ constants represent the "link flag" of an entry, or more commonly, the "entry type". This is the "old way" of
228     * indicating a normal file.
229     */
230    byte LF_OLDNORM = 0;
231
232    /**
233     * Offset inside the header for the "link flag" field.
234     *
235     * @since 1.22
236     * @see TarArchiveEntry
237     */
238    int LF_OFFSET = 156;
239
240    /**
241     * Normal file type.
242     */
243    byte LF_NORMAL = (byte) '0';
244
245    /**
246     * Link file type.
247     */
248    byte LF_LINK = (byte) '1';
249
250    /**
251     * Symbolic link file type.
252     */
253    byte LF_SYMLINK = (byte) '2';
254
255    /**
256     * Character device file type.
257     */
258    byte LF_CHR = (byte) '3';
259
260    /**
261     * Block device file type.
262     */
263    byte LF_BLK = (byte) '4';
264
265    /**
266     * Directory file type.
267     */
268    byte LF_DIR = (byte) '5';
269
270    /**
271     * FIFO (pipe) file type.
272     */
273    byte LF_FIFO = (byte) '6';
274
275    /**
276     * Contiguous file type.
277     */
278    byte LF_CONTIG = (byte) '7';
279
280    /**
281     * Identifies the *next* file on the tape as having a long linkname.
282     */
283    byte LF_GNUTYPE_LONGLINK = (byte) 'K';
284
285    /**
286     * Identifies the *next* file on the tape as having a long name.
287     */
288    byte LF_GNUTYPE_LONGNAME = (byte) 'L';
289
290    /**
291     * Sparse file type.
292     * @since 1.1.1
293     */
294    byte LF_GNUTYPE_SPARSE = (byte) 'S';
295
296    // See "http://www.opengroup.org/onlinepubs/009695399/utilities/pax.html#tag_04_100_13_02"
297
298    /**
299     * Identifies the entry as a Pax extended header.
300     * @since 1.1
301     */
302    byte LF_PAX_EXTENDED_HEADER_LC = (byte) 'x';
303
304    /**
305     * Identifies the entry as a Pax extended header (SunOS tar -E).
306     *
307     * @since 1.1
308     */
309    byte LF_PAX_EXTENDED_HEADER_UC = (byte) 'X';
310
311    /**
312     * Identifies the entry as a Pax global extended header.
313     *
314     * @since 1.1
315     */
316    byte LF_PAX_GLOBAL_EXTENDED_HEADER = (byte) 'g';
317
318    /**
319     * Identifies the entry as a multi-volume past volume #0
320     *
321     * @since 1.22
322     */
323    byte LF_MULTIVOLUME = (byte) 'M';
324
325    /**
326     * The magic tag representing a POSIX tar archive.
327     */
328    String MAGIC_POSIX = "ustar\0";
329    String VERSION_POSIX = "00";
330
331    /**
332     * The magic tag representing a GNU tar archive.
333     */
334    String MAGIC_GNU = "ustar ";
335
336    /**
337     * One of two two possible GNU versions
338     */
339    String VERSION_GNU_SPACE = " \0";
340
341    /**
342     * One of two two possible GNU versions
343     */
344    String VERSION_GNU_ZERO  = "0\0";
345
346    /**
347     * The magic tag representing an Ant tar archive.
348     *
349     * @since 1.1
350     */
351    String MAGIC_ANT = "ustar\0";
352
353    /**
354     * The "version" representing an Ant tar archive.
355     *
356     * @since 1.1
357     */
358    // Does not appear to have a version, however Ant does write 8 bytes,
359    // so assume the version is 2 nulls
360    String VERSION_ANT = "\0\0";
361
362    /**
363     * The name of the GNU tar entry which contains a long name.
364     */
365    String GNU_LONGLINK = "././@LongLink"; // TODO rename as LONGLINK_GNU ?
366
367    /**
368     * The magix string used in the last four bytes of the header to
369     * identify the xstar format.
370     * @since 1.11
371     */
372    String MAGIC_XSTAR = "tar\0";
373
374    /**
375     * Offset inside the header for the xtar multivolume data
376     *
377     * @since 1.22
378     * @see TarArchiveEntry
379     */
380    int XSTAR_MULTIVOLUME_OFFSET = 464;
381
382    /**
383     * Offset inside the header for the xstar magic bytes.
384     * @since 1.11
385     */
386    int XSTAR_MAGIC_OFFSET = 508;
387
388    /**
389     * Length of the XSTAR magic.
390     * @since 1.11
391     */
392    int XSTAR_MAGIC_LEN = 4;
393
394    /**
395     * Length of the prefix field in xstar archives.
396     *
397     * @since 1.11
398     */
399    int PREFIXLEN_XSTAR = 131;
400
401    /**
402     * Offset inside the header for the prefix field in xstar archives.
403     *
404     * @since 1.22
405     * @see TarArchiveEntry
406     */
407    int XSTAR_PREFIX_OFFSET = 345;
408
409    /**
410     * Offset inside the header for the atime field in xstar archives.
411     *
412     * @since 1.22
413     * @see TarArchiveEntry
414     */
415    int XSTAR_ATIME_OFFSET = 476;
416
417    /**
418     * The length of the access time field in a xstar header buffer.
419     *
420     * @since 1.11
421     */
422    int ATIMELEN_XSTAR = 12;
423
424    /**
425     * Offset inside the header for the ctime field in xstar archives.
426     *
427     * @since 1.22
428     * @see TarArchiveEntry
429     */
430    int XSTAR_CTIME_OFFSET = 488;
431
432    /**
433     * The length of the created time field in a xstar header buffer.
434     *
435     * @since 1.11
436     */
437    int CTIMELEN_XSTAR = 12;
438}