/** * Parse an entry's header information from a header buffer. * * @param header The tar entry header buffer to get information from. */ public void parseTarHeader(byte[] header) { int offset = 0; this.name = TarUtils.parseName(header, offset, NAMELEN); offset += NAMELEN; this.mode = (int) TarUtils.parseOctal(header, offset, MODELEN); offset += MODELEN; this.userId = (int) TarUtils.parseOctal(header, offset, UIDLEN); offset += UIDLEN; this.groupId = (int) TarUtils.parseOctal(header, offset, GIDLEN); offset += GIDLEN; this.size = TarUtils.parseOctal(header, offset, SIZELEN); offset += SIZELEN; this.modTime = TarUtils.parseOctal(header, offset, MODTIMELEN); offset += MODTIMELEN; this.checkSum = (int) TarUtils.parseOctal(header, offset, CHKSUMLEN); offset += CHKSUMLEN; this.linkFlag = header[offset++]; this.linkName = TarUtils.parseName(header, offset, NAMELEN); offset += NAMELEN; this.magic = TarUtils.parseName(header, offset, MAGICLEN); offset += MAGICLEN; this.userName = TarUtils.parseName(header, offset, UNAMELEN); offset += UNAMELEN; this.groupName = TarUtils.parseName(header, offset, GNAMELEN); offset += GNAMELEN; this.devMajor = (int) TarUtils.parseOctal(header, offset, DEVLEN); offset += DEVLEN; this.devMinor = (int) TarUtils.parseOctal(header, offset, DEVLEN); }
private void parseTarHeader(byte[] header, ZipEncoding encoding, final boolean oldStyle) throws IOException { int offset = 0; name = oldStyle ? TarUtils.parseName(header, offset, NAMELEN) : TarUtils.parseName(header, offset, NAMELEN, encoding); offset += NAMELEN; mode = (int) TarUtils.parseOctalOrBinary(header, offset, MODELEN); offset += MODELEN; userId = (int) TarUtils.parseOctalOrBinary(header, offset, UIDLEN); offset += UIDLEN; groupId = (int) TarUtils.parseOctalOrBinary(header, offset, GIDLEN); offset += GIDLEN; size = TarUtils.parseOctalOrBinary(header, offset, SIZELEN); offset += SIZELEN; modTime = TarUtils.parseOctalOrBinary(header, offset, MODTIMELEN); offset += MODTIMELEN; offset += CHKSUMLEN; linkFlag = header[offset++]; linkName = oldStyle ? TarUtils.parseName(header, offset, NAMELEN) : TarUtils.parseName(header, offset, NAMELEN, encoding); offset += NAMELEN; magic = TarUtils.parseName(header, offset, MAGICLEN); offset += MAGICLEN; version = TarUtils.parseName(header, offset, VERSIONLEN); offset += VERSIONLEN; userName = oldStyle ? TarUtils.parseName(header, offset, UNAMELEN) : TarUtils.parseName(header, offset, UNAMELEN, encoding); offset += UNAMELEN; groupName = oldStyle ? TarUtils.parseName(header, offset, GNAMELEN) : TarUtils.parseName(header, offset, GNAMELEN, encoding); offset += GNAMELEN; devMajor = (int) TarUtils.parseOctalOrBinary(header, offset, DEVLEN); offset += DEVLEN; devMinor = (int) TarUtils.parseOctalOrBinary(header, offset, DEVLEN); offset += DEVLEN; int type = evaluateType(header); switch (type) { case FORMAT_OLDGNU: { offset += ATIMELEN_GNU; offset += CTIMELEN_GNU; offset += OFFSETLEN_GNU; offset += LONGNAMESLEN_GNU; offset += PAD2LEN_GNU; offset += SPARSELEN_GNU; isExtended = TarUtils.parseBoolean(header, offset); offset += ISEXTENDEDLEN_GNU; realSize = TarUtils.parseOctal(header, offset, REALSIZELEN_GNU); offset += REALSIZELEN_GNU; break; } case FORMAT_POSIX: default: { String prefix = oldStyle ? TarUtils.parseName(header, offset, PREFIXLEN) : TarUtils.parseName(header, offset, PREFIXLEN, encoding); // SunOS tar -E does not add / to directory names, so fix // up to be consistent if (isDirectory() && !name.endsWith("/")) { name = name + "/"; } if (prefix.length() > 0) { name = prefix + "/" + name; } } } }