ParseOctal() public static method

Parse an octal string from a header buffer.
public static ParseOctal ( byte header, int offset, int length ) : long
header byte The header buffer from which to parse.
offset int The offset into the buffer from which to parse.
length int The number of header bytes to parse.
return long
        /// <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    = TarHeader.ParseName(header, offset, TarHeader.NAMELEN).ToString();
            offset += TarHeader.NAMELEN;

            mode    = (int)TarHeader.ParseOctal(header, offset, TarHeader.MODELEN);
            offset += TarHeader.MODELEN;

            UserId  = (int)TarHeader.ParseOctal(header, offset, TarHeader.UIDLEN);
            offset += TarHeader.UIDLEN;

            GroupId = (int)TarHeader.ParseOctal(header, offset, TarHeader.GIDLEN);
            offset += TarHeader.GIDLEN;

            Size    = TarHeader.ParseOctal(header, offset, TarHeader.SIZELEN);
            offset += TarHeader.SIZELEN;

            ModTime = GetDateTimeFromCTime(TarHeader.ParseOctal(header, offset, TarHeader.MODTIMELEN));
            offset += TarHeader.MODTIMELEN;

            checksum = (int)TarHeader.ParseOctal(header, offset, TarHeader.CHKSUMLEN);
            offset  += TarHeader.CHKSUMLEN;

            TypeFlag = header[offset++];

            LinkName = TarHeader.ParseName(header, offset, TarHeader.NAMELEN).ToString();
            offset  += TarHeader.NAMELEN;

            Magic   = TarHeader.ParseName(header, offset, TarHeader.MAGICLEN).ToString();
            offset += TarHeader.MAGICLEN;

            Version = TarHeader.ParseName(header, offset, TarHeader.VERSIONLEN).ToString();
            offset += TarHeader.VERSIONLEN;

            UserName = TarHeader.ParseName(header, offset, TarHeader.UNAMELEN).ToString();
            offset  += TarHeader.UNAMELEN;

            GroupName = TarHeader.ParseName(header, offset, TarHeader.GNAMELEN).ToString();
            offset   += TarHeader.GNAMELEN;

            DevMajor = (int)TarHeader.ParseOctal(header, offset, TarHeader.DEVLEN);
            offset  += TarHeader.DEVLEN;

            DevMinor = (int)TarHeader.ParseOctal(header, offset, TarHeader.DEVLEN);

            // Fields past this point not currently parsed or used...

            isChecksumValid = Checksum == TarHeader.MakeCheckSum(header);
        }
Example #2
0
 private static long ParseBinaryOrOctal(byte[] header, int offset, int length)
 {
     if (header[offset] >= 128)
     {
         long num = 0L;
         for (int i = length - 8; i < length; i++)
         {
             num = (num << 8 | (long)header[offset + i]);
         }
         return(num);
     }
     return(TarHeader.ParseOctal(header, offset, length));
 }
Example #3
0
        /// <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)
        {
            int offset = 0;

            name    = TarHeader.ParseName(header, offset, TarHeader.NAMELEN);
            offset += TarHeader.NAMELEN;

            mode    = (int)TarHeader.ParseOctal(header, offset, TarHeader.MODELEN);
            offset += TarHeader.MODELEN;

            userId  = (int)TarHeader.ParseOctal(header, offset, TarHeader.UIDLEN);
            offset += TarHeader.UIDLEN;

            groupId = (int)TarHeader.ParseOctal(header, offset, TarHeader.GIDLEN);
            offset += TarHeader.GIDLEN;

            size    = TarHeader.ParseOctal(header, offset, TarHeader.SIZELEN);
            offset += TarHeader.SIZELEN;

            modTime = GetDateTimeFromCTime(TarHeader.ParseOctal(header, offset, TarHeader.MODTIMELEN));
            offset += TarHeader.MODTIMELEN;

            checkSum = (int)TarHeader.ParseOctal(header, offset, TarHeader.CHKSUMLEN);
            offset  += TarHeader.CHKSUMLEN;

            typeFlag = header[offset++];

            linkName = TarHeader.ParseName(header, offset, TarHeader.NAMELEN);
            offset  += TarHeader.NAMELEN;

            magic   = TarHeader.ParseName(header, offset, TarHeader.MAGICLEN);
            offset += TarHeader.MAGICLEN;

            version = TarHeader.ParseName(header, offset, TarHeader.VERSIONLEN);
            offset += TarHeader.VERSIONLEN;

            userName = TarHeader.ParseName(header, offset, TarHeader.UNAMELEN);
            offset  += TarHeader.UNAMELEN;

            groupName = TarHeader.ParseName(header, offset, TarHeader.GNAMELEN);
            offset   += TarHeader.GNAMELEN;

            devMajor = (int)TarHeader.ParseOctal(header, offset, TarHeader.DEVLEN);
            offset  += TarHeader.DEVLEN;

            devMinor = (int)TarHeader.ParseOctal(header, offset, TarHeader.DEVLEN);

            // Fields past this point not currently parsed or used...
        }
Example #4
0
        public void ParseBuffer(byte[] header)
        {
            if (header == null)
            {
                throw new ArgumentNullException("header");
            }
            int num = 0;

            this.name     = TarHeader.ParseName(header, num, 100).ToString();
            num          += 100;
            this.mode     = (int)TarHeader.ParseOctal(header, num, 8);
            num          += 8;
            this.UserId   = (int)TarHeader.ParseOctal(header, num, 8);
            num          += 8;
            this.GroupId  = (int)TarHeader.ParseOctal(header, num, 8);
            num          += 8;
            this.Size     = TarHeader.ParseBinaryOrOctal(header, num, 12);
            num          += 12;
            this.ModTime  = TarHeader.GetDateTimeFromCTime(TarHeader.ParseOctal(header, num, 12));
            num          += 12;
            this.checksum = (int)TarHeader.ParseOctal(header, num, 8);
            num          += 8;
            this.TypeFlag = header[num++];
            this.LinkName = TarHeader.ParseName(header, num, 100).ToString();
            num          += 100;
            this.Magic    = TarHeader.ParseName(header, num, 6).ToString();
            num          += 6;
            if (this.Magic == "ustar")
            {
                this.Version   = TarHeader.ParseName(header, num, 2).ToString();
                num           += 2;
                this.UserName  = TarHeader.ParseName(header, num, 32).ToString();
                num           += 32;
                this.GroupName = TarHeader.ParseName(header, num, 32).ToString();
                num           += 32;
                this.DevMajor  = (int)TarHeader.ParseOctal(header, num, 8);
                num           += 8;
                this.DevMinor  = (int)TarHeader.ParseOctal(header, num, 8);
                num           += 8;
                string text = TarHeader.ParseName(header, num, 155).ToString();
                if (!string.IsNullOrEmpty(text))
                {
                    this.Name = text + '/' + this.Name;
                }
            }
            this.isChecksumValid = (this.Checksum == TarHeader.MakeCheckSum(header));
        }