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         */
056        int    SIZELEN = 12;
057    
058        /**
059         * The maximum size of a file in a tar archive (That's 11 sevens, octal).
060         */
061        long   MAXSIZE = 077777777777L;
062    
063        /** Offset of start of magic field within header record */
064        int    MAGIC_OFFSET = 257;
065        /**
066         * The length of the magic field in a header buffer.
067         */
068        int    MAGICLEN = 6;
069    
070        /** Offset of start of magic field within header record */
071        int    VERSION_OFFSET = 263;
072        /**
073         * Previously this was regarded as part of "magic" field, but it is separate.
074         */
075        int    VERSIONLEN = 2;
076    
077        /**
078         * The length of the modification time field in a header buffer.
079         */
080        int    MODTIMELEN = 12;
081    
082        /**
083         * The length of the user name field in a header buffer.
084         */
085        int    UNAMELEN = 32;
086    
087        /**
088         * The length of the group name field in a header buffer.
089         */
090        int    GNAMELEN = 32;
091    
092        /**
093         * The length of each of the device fields (major and minor) in a header buffer.
094         */
095        int    DEVLEN = 8;
096    
097        /**
098         * Length of the prefix field.
099         * 
100         */
101        int    PREFIXLEN = 155;
102    
103        /**
104         * LF_ constants represent the "link flag" of an entry, or more commonly,
105         * the "entry type". This is the "old way" of indicating a normal file.
106         */
107        byte   LF_OLDNORM = 0;
108    
109        /**
110         * Normal file type.
111         */
112        byte   LF_NORMAL = (byte) '0';
113    
114        /**
115         * Link file type.
116         */
117        byte   LF_LINK = (byte) '1';
118    
119        /**
120         * Symbolic link file type.
121         */
122        byte   LF_SYMLINK = (byte) '2';
123    
124        /**
125         * Character device file type.
126         */
127        byte   LF_CHR = (byte) '3';
128    
129        /**
130         * Block device file type.
131         */
132        byte   LF_BLK = (byte) '4';
133    
134        /**
135         * Directory file type.
136         */
137        byte   LF_DIR = (byte) '5';
138    
139        /**
140         * FIFO (pipe) file type.
141         */
142        byte   LF_FIFO = (byte) '6';
143    
144        /**
145         * Contiguous file type.
146         */
147        byte   LF_CONTIG = (byte) '7';
148    
149        /**
150         * The magic tag representing a POSIX tar archive.
151         */
152        String MAGIC_POSIX = "ustar\0";
153        String VERSION_POSIX = "00";
154    
155        /**
156         * The magic tag representing a GNU tar archive.
157         */
158        String MAGIC_GNU = "ustar ";
159        // Appear to be two possible GNU versions
160        String VERSION_GNU_SPACE = " \0";
161        String VERSION_GNU_ZERO  = "0\0";
162    
163        /**
164         * The name of the GNU tar entry which contains a long name.
165         */
166        String GNU_LONGLINK = "././@LongLink"; // TODO rename as LONGLINK_GNU ?
167    
168        /**
169         * Identifies the *next* file on the tape as having a long name.
170         */
171        byte LF_GNUTYPE_LONGNAME = (byte) 'L';
172    }