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