1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * https://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 package org.apache.commons.compress.archivers.tar; 20 21 /** 22 * This interface contains all the definitions used in the package. 23 * <p> 24 * For tar formats (FORMAT_OLDGNU, FORMAT_POSIX, etc.) see GNU tar <a href="https://git.savannah.gnu.org/cgit/tar.git/tree/src/tar.h?h=v1.35">tar.h</a> and type 25 * {@code enum archive_format}. 26 * </p> 27 * <p> 28 * TODO Next major version: Update to a class. 29 * </p> 30 */ 31 // CheckStyle:InterfaceIsTypeCheck OFF (bc) 32 public interface TarConstants { 33 34 /** 35 * Default record size. 36 */ 37 int DEFAULT_RCDSIZE = 512; 38 39 /** 40 * Default block size. 41 */ 42 int DEFAULT_BLKSIZE = DEFAULT_RCDSIZE * 20; 43 44 /** 45 * GNU format as per before tar 1.12. 46 */ 47 int FORMAT_OLDGNU = 2; 48 49 /** 50 * Pure POSIX format. 51 */ 52 int FORMAT_POSIX = 3; 53 54 /** 55 * xstar format used by Jörg Schilling's star. 56 */ 57 int FORMAT_XSTAR = 4; 58 59 /** 60 * The length of the name field in a header buffer. 61 */ 62 int NAMELEN = 100; 63 64 /** 65 * The length of the mode field in a header buffer. 66 */ 67 int MODELEN = 8; 68 69 /** 70 * The length of the user id field in a header buffer. 71 */ 72 int UIDLEN = 8; 73 74 /** 75 * The length of the group id field in a header buffer. 76 */ 77 int GIDLEN = 8; 78 79 /** 80 * The maximum value of gid/uid in a tar archive which can be expressed in octal char notation (that's 7 sevens, octal). 81 */ 82 long MAXID = 07777777L; 83 84 /** 85 * The length of the checksum field in a header buffer. 86 */ 87 int CHKSUMLEN = 8; 88 89 /** 90 * Offset of the checksum field within header record. 91 * 92 * @since 1.5 93 */ 94 int CHKSUM_OFFSET = 148; 95 96 /** 97 * The length of the size field in a header buffer. Includes the trailing space or NUL. 98 */ 99 int SIZELEN = 12; 100 101 /** 102 * The maximum size of a file in a tar archive which can be expressed in octal char notation (that's 11 sevens, octal). 103 */ 104 long MAXSIZE = 077777777777L; 105 106 /** Offset of start of magic field within header record */ 107 int MAGIC_OFFSET = 257; 108 109 /** 110 * The length of the magic field in a header buffer. 111 */ 112 int MAGICLEN = 6; 113 114 /** 115 * Offset of start of magic field within header record. 116 */ 117 int VERSION_OFFSET = 263; 118 119 /** 120 * Previously this was regarded as part of "magic" field, but it is separate. 121 */ 122 int VERSIONLEN = 2; 123 124 /** 125 * The length of the modification time field in a header buffer. 126 */ 127 int MODTIMELEN = 12; 128 129 /** 130 * The length of the user name field in a header buffer. 131 */ 132 int UNAMELEN = 32; 133 134 /** 135 * The length of the group name field in a header buffer. 136 */ 137 int GNAMELEN = 32; 138 139 /** 140 * The length of each of the device fields (major and minor) in a header buffer. 141 */ 142 int DEVLEN = 8; 143 144 /** 145 * Length of the prefix field. 146 */ 147 int PREFIXLEN = 155; 148 149 /** 150 * The length of the access time field in an old GNU header buffer. 151 */ 152 int ATIMELEN_GNU = 12; 153 154 /** 155 * The length of the created time field in an old GNU header buffer. 156 */ 157 int CTIMELEN_GNU = 12; 158 159 /** 160 * The length of the multivolume start offset field in an old GNU header buffer. 161 */ 162 int OFFSETLEN_GNU = 12; 163 164 /** 165 * The length of the long names field in an old GNU header buffer. 166 */ 167 int LONGNAMESLEN_GNU = 4; 168 169 /** 170 * The length of the padding field in an old GNU header buffer. 171 */ 172 int PAD2LEN_GNU = 1; 173 174 /** 175 * The sum of the length of all sparse headers in an old GNU header buffer. 176 */ 177 int SPARSELEN_GNU = 96; 178 179 /** 180 * The length of the is extension field in an old GNU header buffer. 181 */ 182 int ISEXTENDEDLEN_GNU = 1; 183 184 /** 185 * The length of the real size field in an old GNU header buffer. 186 */ 187 int REALSIZELEN_GNU = 12; 188 189 /** 190 * The length of offset in struct sparse 191 * 192 * @since 1.20 193 */ 194 int SPARSE_OFFSET_LEN = 12; 195 196 /** 197 * The length of numbytes in struct sparse 198 * 199 * @since 1.20 200 */ 201 int SPARSE_NUMBYTES_LEN = 12; 202 203 /** 204 * The number of sparse headers in an old GNU header 205 * 206 * @since 1.20 207 */ 208 int SPARSE_HEADERS_IN_OLDGNU_HEADER = 4; 209 210 /** 211 * The number of sparse headers in an extension header 212 * 213 * @since 1.20 214 */ 215 int SPARSE_HEADERS_IN_EXTENSION_HEADER = 21; 216 217 /** 218 * The sum of the length of all sparse headers in a sparse header buffer. 219 */ 220 int SPARSELEN_GNU_SPARSE = 504; 221 222 /** 223 * The length of the is extension field in a sparse header buffer. 224 */ 225 int ISEXTENDEDLEN_GNU_SPARSE = 1; 226 227 /** 228 * LF_ constants represent the "link flag" of an entry, or more commonly, the "entry type". This is the "old way" of indicating a normal file. 229 */ 230 byte LF_OLDNORM = 0; 231 232 /** 233 * Offset inside the header for the "link flag" field. 234 * 235 * @since 1.22 236 * @see TarArchiveEntry 237 */ 238 int LF_OFFSET = 156; 239 240 /** 241 * Normal file type. 242 */ 243 byte LF_NORMAL = (byte) '0'; 244 245 /** 246 * Link file type. 247 */ 248 byte LF_LINK = (byte) '1'; 249 250 /** 251 * Symbolic link file type. 252 */ 253 byte LF_SYMLINK = (byte) '2'; 254 255 /** 256 * Character device file type. 257 */ 258 byte LF_CHR = (byte) '3'; 259 260 /** 261 * Block device file type. 262 */ 263 byte LF_BLK = (byte) '4'; 264 265 /** 266 * Directory file type. 267 */ 268 byte LF_DIR = (byte) '5'; 269 270 /** 271 * FIFO (pipe) file type. 272 */ 273 byte LF_FIFO = (byte) '6'; 274 275 /** 276 * Contiguous file type. 277 */ 278 byte LF_CONTIG = (byte) '7'; 279 280 /** 281 * Identifies the *next* file on the tape as having a long link name. 282 */ 283 byte LF_GNUTYPE_LONGLINK = (byte) 'K'; 284 285 /** 286 * Identifies the *next* file on the tape as having a long name. 287 */ 288 byte LF_GNUTYPE_LONGNAME = (byte) 'L'; 289 290 /** 291 * Sparse file type. 292 * 293 * @since 1.1.1 294 */ 295 byte LF_GNUTYPE_SPARSE = (byte) 'S'; 296 297 // See "http://www.opengroup.org/onlinepubs/009695399/utilities/pax.html#tag_04_100_13_02" 298 299 /** 300 * Identifies the entry as a Pax extended header. 301 * 302 * @since 1.1 303 */ 304 byte LF_PAX_EXTENDED_HEADER_LC = (byte) 'x'; 305 306 /** 307 * Identifies the entry as a Pax extended header (SunOS tar -E). 308 * 309 * @since 1.1 310 */ 311 byte LF_PAX_EXTENDED_HEADER_UC = (byte) 'X'; 312 313 /** 314 * Identifies the entry as a Pax global extended header. 315 * 316 * @since 1.1 317 */ 318 byte LF_PAX_GLOBAL_EXTENDED_HEADER = (byte) 'g'; 319 320 /** 321 * Identifies the entry as a multi-volume past volume #0 322 * 323 * @since 1.22 324 */ 325 byte LF_MULTIVOLUME = (byte) 'M'; 326 327 /** 328 * The magic tag representing a POSIX tar archive. 329 * <p> 330 * "ustar" and a null. 331 * </p> 332 */ 333 String MAGIC_POSIX = "ustar\0"; 334 335 /** 336 * Default version. 337 */ 338 String VERSION_POSIX = "00"; 339 340 /** 341 * The magic tag representing a GNU tar archive. 342 */ 343 String MAGIC_GNU = "ustar "; 344 345 /** 346 * One of two possible GNU versions 347 */ 348 String VERSION_GNU_SPACE = " \0"; 349 350 /** 351 * One of two possible GNU versions 352 */ 353 String VERSION_GNU_ZERO = "0\0"; 354 355 /** 356 * The magic tag representing an Ant tar archive. 357 * 358 * @since 1.1 359 */ 360 String MAGIC_ANT = "ustar\0"; 361 362 /** 363 * The "version" representing an Ant tar archive. 364 * 365 * @since 1.1 366 */ 367 // Does not appear to have a version, however Ant does write 8 bytes, 368 // so assume the version is 2 nulls 369 String VERSION_ANT = "\0\0"; 370 371 /** 372 * The name of the GNU tar entry which contains a long name. 373 */ 374 String GNU_LONGLINK = "././@LongLink"; // TODO rename as LONGLINK_GNU ? 375 376 /** 377 * The magix string used in the last four bytes of the header to identify the xstar format. 378 * 379 * @since 1.11 380 */ 381 String MAGIC_XSTAR = "tar\0"; 382 383 /** 384 * Offset inside the header for the xtar multivolume data 385 * 386 * @since 1.22 387 * @see TarArchiveEntry 388 */ 389 int XSTAR_MULTIVOLUME_OFFSET = 464; 390 391 /** 392 * Offset inside the header for the xstar magic bytes. 393 * 394 * @since 1.11 395 */ 396 int XSTAR_MAGIC_OFFSET = 508; 397 398 /** 399 * Length of the XSTAR magic. 400 * 401 * @since 1.11 402 */ 403 int XSTAR_MAGIC_LEN = 4; 404 405 /** 406 * Length of the prefix field in xstar archives. 407 * 408 * @since 1.11 409 */ 410 int PREFIXLEN_XSTAR = 131; 411 412 /** 413 * Offset inside the header for the prefix field in xstar archives. 414 * 415 * @since 1.22 416 * @see TarArchiveEntry 417 */ 418 int XSTAR_PREFIX_OFFSET = 345; 419 420 /** 421 * Offset inside the header for the atime field in xstar archives. 422 * 423 * @since 1.22 424 * @see TarArchiveEntry 425 */ 426 int XSTAR_ATIME_OFFSET = 476; 427 428 /** 429 * The length of the access time field in a xstar header buffer. 430 * 431 * @since 1.11 432 */ 433 int ATIMELEN_XSTAR = 12; 434 435 /** 436 * Offset inside the header for the ctime field in xstar archives. 437 * 438 * @since 1.22 439 * @see TarArchiveEntry 440 */ 441 int XSTAR_CTIME_OFFSET = 488; 442 443 /** 444 * The length of the created time field in a xstar header buffer. 445 * 446 * @since 1.11 447 */ 448 int CTIMELEN_XSTAR = 12; 449 }