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