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     */
025    // CheckStyle:InterfaceIsTypeCheck OFF (bc)
026    public interface TarConstants {
027    
028        /**
029         * The length of the name field in a header buffer.
030         */
031        int    NAMELEN = 100;
032    
033        /**
034         * The length of the mode field in a header buffer.
035         */
036        int    MODELEN = 8;
037    
038        /**
039         * The length of the user id field in a header buffer.
040         */
041        int    UIDLEN = 8;
042    
043        /**
044         * The length of the group id field in a header buffer.
045         */
046        int    GIDLEN = 8;
047    
048        /**
049         * The length of the checksum field in a header buffer.
050         */
051        int    CHKSUMLEN = 8;
052    
053        /**
054         * The length of the size field in a header buffer.
055         * Includes the trailing space or NUL.
056         */
057        int    SIZELEN = 12;
058    
059        /**
060         * The maximum size of a file in a tar archive (That's 11 sevens, octal).
061         */
062        long   MAXSIZE = 077777777777L;
063    
064        /** Offset of start of magic field within header record */
065        int    MAGIC_OFFSET = 257;
066        /**
067         * The length of the magic field in a header buffer.
068         */
069        int    MAGICLEN = 6;
070    
071        /** Offset of start of magic field within header record */
072        int    VERSION_OFFSET = 263;
073        /**
074         * Previously this was regarded as part of "magic" field, but it is separate.
075         */
076        int    VERSIONLEN = 2;
077    
078        /**
079         * The length of the modification time field in a header buffer.
080         */
081        int    MODTIMELEN = 12;
082    
083        /**
084         * The length of the user name field in a header buffer.
085         */
086        int    UNAMELEN = 32;
087    
088        /**
089         * The length of the group name field in a header buffer.
090         */
091        int    GNAMELEN = 32;
092    
093        /**
094         * The length of each of the device fields (major and minor) in a header buffer.
095         */
096        int    DEVLEN = 8;
097    
098        /**
099         * Length of the prefix field.
100         * 
101         */
102        int    PREFIXLEN = 155;
103    
104        /**
105         * LF_ constants represent the "link flag" of an entry, or more commonly,
106         * the "entry type". This is the "old way" of indicating a normal file.
107         */
108        byte   LF_OLDNORM = 0;
109    
110        /**
111         * Normal file type.
112         */
113        byte   LF_NORMAL = (byte) '0';
114    
115        /**
116         * Link file type.
117         */
118        byte   LF_LINK = (byte) '1';
119    
120        /**
121         * Symbolic link file type.
122         */
123        byte   LF_SYMLINK = (byte) '2';
124    
125        /**
126         * Character device file type.
127         */
128        byte   LF_CHR = (byte) '3';
129    
130        /**
131         * Block device file type.
132         */
133        byte   LF_BLK = (byte) '4';
134    
135        /**
136         * Directory file type.
137         */
138        byte   LF_DIR = (byte) '5';
139    
140        /**
141         * FIFO (pipe) file type.
142         */
143        byte   LF_FIFO = (byte) '6';
144    
145        /**
146         * Contiguous file type.
147         */
148        byte   LF_CONTIG = (byte) '7';
149    
150        /**
151         * Identifies the *next* file on the tape as having a long name.
152         */
153        byte LF_GNUTYPE_LONGNAME = (byte) 'L';
154    
155        // See "http://www.opengroup.org/onlinepubs/009695399/utilities/pax.html#tag_04_100_13_02"
156    
157        /**
158         * Identifies the entry as a Pax extended header.
159         * @since Apache Commons Compress 1.1
160         */
161        byte LF_PAX_EXTENDED_HEADER_LC = (byte) 'x';
162    
163        /**
164         * Identifies the entry as a Pax extended header (SunOS tar -E).
165         *
166         * @since Apache Commons Compress 1.1
167         */
168        byte LF_PAX_EXTENDED_HEADER_UC = (byte) 'X';
169        
170        /**
171         * Identifies the entry as a Pax global extended header.
172         *
173         * @since Apache Commons Compress 1.1
174         */
175        byte LF_PAX_GLOBAL_EXTENDED_HEADER = (byte) 'g';
176        
177        /**
178         * The magic tag representing a POSIX tar archive.
179         */
180        String MAGIC_POSIX = "ustar\0";
181        String VERSION_POSIX = "00";
182    
183        /**
184         * The magic tag representing a GNU tar archive.
185         */
186        String MAGIC_GNU = "ustar ";
187        // Appear to be two possible GNU versions
188        String VERSION_GNU_SPACE = " \0";
189        String VERSION_GNU_ZERO  = "0\0";
190    
191        /**
192         * The magic tag representing an Ant tar archive.
193         *
194         * @since Apache Commons Compress 1.1
195         */
196        String MAGIC_ANT = "ustar\0";
197        
198        /**
199         * The "version" representing an Ant tar archive.
200         *
201         * @since Apache Commons Compress 1.1
202         */
203        // Does not appear to have a version, however Ant does write 8 bytes,
204        // so assume the version is 2 nulls
205        String VERSION_ANT = "\0\0";
206    
207        /**
208         * The name of the GNU tar entry which contains a long name.
209         */
210        String GNU_LONGLINK = "././@LongLink"; // TODO rename as LONGLINK_GNU ?
211    
212    }