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 }