in src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java [1639:1730]
private void processPaxHeader(final String key, final String val, final Map<String, String> headers)
throws IOException {
/*
* The following headers are defined for Pax.
* charset: cannot use these without changing TarArchiveEntry fields
* mtime
* atime
* ctime
* LIBARCHIVE.creationtime
* comment
* gid, gname
* linkpath
* size
* uid,uname
* SCHILY.devminor, SCHILY.devmajor: don't have setters/getters for those
*
* GNU sparse files use additional members, we use
* GNU.sparse.size to detect the 0.0 and 0.1 versions and
* GNU.sparse.realsize for 1.0.
*
* star files use additional members of which we use
* SCHILY.filetype in order to detect star sparse files.
*
* If called from addExtraPaxHeader, these additional headers must be already present .
*/
switch (key) {
case "path":
setName(val);
break;
case "linkpath":
setLinkName(val);
break;
case "gid":
setGroupId(Long.parseLong(val));
break;
case "gname":
setGroupName(val);
break;
case "uid":
setUserId(Long.parseLong(val));
break;
case "uname":
setUserName(val);
break;
case "size":
final long size = Long.parseLong(val);
if (size < 0) {
throw new IOException("Corrupted TAR archive. Entry size is negative");
}
setSize(size);
break;
case "mtime":
setLastModifiedTime(FileTime.from(parseInstantFromDecimalSeconds(val)));
break;
case "atime":
setLastAccessTime(FileTime.from(parseInstantFromDecimalSeconds(val)));
break;
case "ctime":
setStatusChangeTime(FileTime.from(parseInstantFromDecimalSeconds(val)));
break;
case "LIBARCHIVE.creationtime":
setCreationTime(FileTime.from(parseInstantFromDecimalSeconds(val)));
break;
case "SCHILY.devminor":
final int devMinor = Integer.parseInt(val);
if (devMinor < 0) {
throw new IOException("Corrupted TAR archive. Dev-Minor is negative");
}
setDevMinor(devMinor);
break;
case "SCHILY.devmajor":
final int devMajor = Integer.parseInt(val);
if (devMajor < 0) {
throw new IOException("Corrupted TAR archive. Dev-Major is negative");
}
setDevMajor(devMajor);
break;
case TarGnuSparseKeys.SIZE:
fillGNUSparse0xData(headers);
break;
case TarGnuSparseKeys.REALSIZE:
fillGNUSparse1xData(headers);
break;
case "SCHILY.filetype":
if ("sparse".equals(val)) {
fillStarSparseData(headers);
}
break;
default:
extraPaxHeaders.put(key, val);
}
}