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