View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.commons.compress.archivers.tar;
20  
21  /**
22   * This interface contains all the definitions used in the package.
23   * <p>
24   * For tar formats (FORMAT_OLDGNU, FORMAT_POSIX, etc.) see GNU tar <a href="https://git.savannah.gnu.org/cgit/tar.git/tree/src/tar.h?h=v1.35">tar.h</a> and type
25   * {@code enum archive_format}.
26   * </p>
27   */
28  // CheckStyle:InterfaceIsTypeCheck OFF (bc)
29  public interface TarConstants {
30  
31      /** Default record size */
32      int DEFAULT_RCDSIZE = 512;
33  
34      /** Default block size */
35      int DEFAULT_BLKSIZE = DEFAULT_RCDSIZE * 20;
36  
37      /**
38       * GNU format as per before tar 1.12.
39       */
40      int FORMAT_OLDGNU = 2;
41  
42      /**
43       * Pure Posix format.
44       */
45      int FORMAT_POSIX = 3;
46  
47      /**
48       * xstar format used by Jörg Schilling's star.
49       */
50      int FORMAT_XSTAR = 4;
51  
52      /**
53       * The length of the name field in a header buffer.
54       */
55      int NAMELEN = 100;
56  
57      /**
58       * The length of the mode field in a header buffer.
59       */
60      int MODELEN = 8;
61  
62      /**
63       * The length of the user id field in a header buffer.
64       */
65      int UIDLEN = 8;
66  
67      /**
68       * The length of the group id field in a header buffer.
69       */
70      int GIDLEN = 8;
71  
72      /**
73       * The maximum value of gid/uid in a tar archive which can be expressed in octal char notation (that's 7 sevens, octal).
74       */
75      long MAXID = 07777777L;
76  
77      /**
78       * The length of the checksum field in a header buffer.
79       */
80      int CHKSUMLEN = 8;
81  
82      /**
83       * Offset of the checksum field within header record.
84       *
85       * @since 1.5
86       */
87      int CHKSUM_OFFSET = 148;
88  
89      /**
90       * The length of the size field in a header buffer. Includes the trailing space or NUL.
91       */
92      int SIZELEN = 12;
93  
94      /**
95       * The maximum size of a file in a tar archive which can be expressed in octal char notation (that's 11 sevens, octal).
96       */
97      long MAXSIZE = 077777777777L;
98  
99      /** Offset of start of magic field within header record */
100     int MAGIC_OFFSET = 257;
101     /**
102      * The length of the magic field in a header buffer.
103      */
104     int MAGICLEN = 6;
105 
106     /** Offset of start of magic field within header record */
107     int VERSION_OFFSET = 263;
108     /**
109      * Previously this was regarded as part of "magic" field, but it is separate.
110      */
111     int VERSIONLEN = 2;
112 
113     /**
114      * The length of the modification time field in a header buffer.
115      */
116     int MODTIMELEN = 12;
117 
118     /**
119      * The length of the user name field in a header buffer.
120      */
121     int UNAMELEN = 32;
122 
123     /**
124      * The length of the group name field in a header buffer.
125      */
126     int GNAMELEN = 32;
127 
128     /**
129      * The length of each of the device fields (major and minor) in a header buffer.
130      */
131     int DEVLEN = 8;
132 
133     /**
134      * Length of the prefix field.
135      */
136     int PREFIXLEN = 155;
137 
138     /**
139      * The length of the access time field in an old GNU header buffer.
140      */
141     int ATIMELEN_GNU = 12;
142 
143     /**
144      * The length of the created time field in an old GNU header buffer.
145      */
146     int CTIMELEN_GNU = 12;
147 
148     /**
149      * The length of the multivolume start offset field in an old GNU header buffer.
150      */
151     int OFFSETLEN_GNU = 12;
152 
153     /**
154      * The length of the long names field in an old GNU header buffer.
155      */
156     int LONGNAMESLEN_GNU = 4;
157 
158     /**
159      * The length of the padding field in an old GNU header buffer.
160      */
161     int PAD2LEN_GNU = 1;
162 
163     /**
164      * The sum of the length of all sparse headers in an old GNU header buffer.
165      */
166     int SPARSELEN_GNU = 96;
167 
168     /**
169      * The length of the is extension field in an old GNU header buffer.
170      */
171     int ISEXTENDEDLEN_GNU = 1;
172 
173     /**
174      * The length of the real size field in an old GNU header buffer.
175      */
176     int REALSIZELEN_GNU = 12;
177 
178     /**
179      * The length of offset in struct sparse
180      *
181      * @since 1.20
182      */
183     int SPARSE_OFFSET_LEN = 12;
184 
185     /**
186      * The length of numbytes in struct sparse
187      *
188      * @since 1.20
189      */
190     int SPARSE_NUMBYTES_LEN = 12;
191 
192     /**
193      * The number of sparse headers in an old GNU header
194      *
195      * @since 1.20
196      */
197     int SPARSE_HEADERS_IN_OLDGNU_HEADER = 4;
198 
199     /**
200      * The number of sparse headers in an extension header
201      *
202      * @since 1.20
203      */
204     int SPARSE_HEADERS_IN_EXTENSION_HEADER = 21;
205 
206     /**
207      * The sum of the length of all sparse headers in a sparse header buffer.
208      */
209     int SPARSELEN_GNU_SPARSE = 504;
210 
211     /**
212      * The length of the is extension field in a sparse header buffer.
213      */
214     int ISEXTENDEDLEN_GNU_SPARSE = 1;
215 
216     /**
217      * 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.
218      */
219     byte LF_OLDNORM = 0;
220 
221     /**
222      * Offset inside the header for the "link flag" field.
223      *
224      * @since 1.22
225      * @see TarArchiveEntry
226      */
227     int LF_OFFSET = 156;
228 
229     /**
230      * Normal file type.
231      */
232     byte LF_NORMAL = (byte) '0';
233 
234     /**
235      * Link file type.
236      */
237     byte LF_LINK = (byte) '1';
238 
239     /**
240      * Symbolic link file type.
241      */
242     byte LF_SYMLINK = (byte) '2';
243 
244     /**
245      * Character device file type.
246      */
247     byte LF_CHR = (byte) '3';
248 
249     /**
250      * Block device file type.
251      */
252     byte LF_BLK = (byte) '4';
253 
254     /**
255      * Directory file type.
256      */
257     byte LF_DIR = (byte) '5';
258 
259     /**
260      * FIFO (pipe) file type.
261      */
262     byte LF_FIFO = (byte) '6';
263 
264     /**
265      * Contiguous file type.
266      */
267     byte LF_CONTIG = (byte) '7';
268 
269     /**
270      * Identifies the *next* file on the tape as having a long link name.
271      */
272     byte LF_GNUTYPE_LONGLINK = (byte) 'K';
273 
274     /**
275      * Identifies the *next* file on the tape as having a long name.
276      */
277     byte LF_GNUTYPE_LONGNAME = (byte) 'L';
278 
279     /**
280      * Sparse file type.
281      *
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      *
291      * @since 1.1
292      */
293     byte LF_PAX_EXTENDED_HEADER_LC = (byte) 'x';
294 
295     /**
296      * Identifies the entry as a Pax extended header (SunOS tar -E).
297      *
298      * @since 1.1
299      */
300     byte LF_PAX_EXTENDED_HEADER_UC = (byte) 'X';
301 
302     /**
303      * Identifies the entry as a Pax global extended header.
304      *
305      * @since 1.1
306      */
307     byte LF_PAX_GLOBAL_EXTENDED_HEADER = (byte) 'g';
308 
309     /**
310      * Identifies the entry as a multi-volume past volume #0
311      *
312      * @since 1.22
313      */
314     byte LF_MULTIVOLUME = (byte) 'M';
315 
316     /**
317      * The magic tag representing a POSIX tar archive.
318      * <p>
319      * "ustar" and a null.
320      * </p>
321      */
322     String MAGIC_POSIX = "ustar\0";
323     String VERSION_POSIX = "00";
324 
325     /**
326      * The magic tag representing a GNU tar archive.
327      */
328     String MAGIC_GNU = "ustar ";
329 
330     /**
331      * One of two possible GNU versions
332      */
333     String VERSION_GNU_SPACE = " \0";
334 
335     /**
336      * One of two possible GNU versions
337      */
338     String VERSION_GNU_ZERO = "0\0";
339 
340     /**
341      * The magic tag representing an Ant tar archive.
342      *
343      * @since 1.1
344      */
345     String MAGIC_ANT = "ustar\0";
346 
347     /**
348      * The "version" representing an Ant tar archive.
349      *
350      * @since 1.1
351      */
352     // Does not appear to have a version, however Ant does write 8 bytes,
353     // so assume the version is 2 nulls
354     String VERSION_ANT = "\0\0";
355 
356     /**
357      * The name of the GNU tar entry which contains a long name.
358      */
359     String GNU_LONGLINK = "././@LongLink"; // TODO rename as LONGLINK_GNU ?
360 
361     /**
362      * The magix string used in the last four bytes of the header to identify the xstar format.
363      *
364      * @since 1.11
365      */
366     String MAGIC_XSTAR = "tar\0";
367 
368     /**
369      * Offset inside the header for the xtar multivolume data
370      *
371      * @since 1.22
372      * @see TarArchiveEntry
373      */
374     int XSTAR_MULTIVOLUME_OFFSET = 464;
375 
376     /**
377      * Offset inside the header for the xstar magic bytes.
378      *
379      * @since 1.11
380      */
381     int XSTAR_MAGIC_OFFSET = 508;
382 
383     /**
384      * Length of the XSTAR magic.
385      *
386      * @since 1.11
387      */
388     int XSTAR_MAGIC_LEN = 4;
389 
390     /**
391      * Length of the prefix field in xstar archives.
392      *
393      * @since 1.11
394      */
395     int PREFIXLEN_XSTAR = 131;
396 
397     /**
398      * Offset inside the header for the prefix field in xstar archives.
399      *
400      * @since 1.22
401      * @see TarArchiveEntry
402      */
403     int XSTAR_PREFIX_OFFSET = 345;
404 
405     /**
406      * Offset inside the header for the atime field in xstar archives.
407      *
408      * @since 1.22
409      * @see TarArchiveEntry
410      */
411     int XSTAR_ATIME_OFFSET = 476;
412 
413     /**
414      * The length of the access time field in a xstar header buffer.
415      *
416      * @since 1.11
417      */
418     int ATIMELEN_XSTAR = 12;
419 
420     /**
421      * Offset inside the header for the ctime field in xstar archives.
422      *
423      * @since 1.22
424      * @see TarArchiveEntry
425      */
426     int XSTAR_CTIME_OFFSET = 488;
427 
428     /**
429      * The length of the created time field in a xstar header buffer.
430      *
431      * @since 1.11
432      */
433     int CTIMELEN_XSTAR = 12;
434 }