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 }