/// <summary> /// Parse TarHeader information from a header buffer. /// </summary> /// <param name = "header"> /// The tar entry header buffer to get information from. /// </param> public void ParseBuffer(byte[] header) { if (header == null) { throw new ArgumentNullException("header"); } int offset = 0; name = ParseName(header, offset, NAMELEN).ToString(); offset += NAMELEN; mode = (int)ParseOctal(header, offset, MODELEN); offset += MODELEN; UserId = (int)ParseOctal(header, offset, UIDLEN); offset += UIDLEN; GroupId = (int)ParseOctal(header, offset, GIDLEN); offset += GIDLEN; Size = ParseBinaryOrOctal(header, offset, SIZELEN); offset += SIZELEN; ModTime = GetDateTimeFromCTime(ParseOctal(header, offset, MODTIMELEN)); offset += MODTIMELEN; checksum = (int)ParseOctal(header, offset, CHKSUMLEN); offset += CHKSUMLEN; TypeFlag = header[offset++]; LinkName = ParseName(header, offset, NAMELEN).ToString(); offset += NAMELEN; Magic = ParseName(header, offset, MAGICLEN).ToString(); offset += MAGICLEN; if (Magic == "ustar") { Version = ParseName(header, offset, VERSIONLEN).ToString(); offset += VERSIONLEN; UserName = ParseName(header, offset, UNAMELEN).ToString(); offset += UNAMELEN; GroupName = ParseName(header, offset, GNAMELEN).ToString(); offset += GNAMELEN; DevMajor = (int)ParseOctal(header, offset, DEVLEN); offset += DEVLEN; DevMinor = (int)ParseOctal(header, offset, DEVLEN); offset += DEVLEN; string prefix = ParseName(header, offset, PREFIXLEN).ToString(); if (!string.IsNullOrEmpty(prefix)) { Name = prefix + '/' + Name; } } isChecksumValid = Checksum == TarHeader.MakeCheckSum(header); }