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
コード例 #1
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)
        {
            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);
        }
コード例 #2
0
ファイル: TarHeader.cs プロジェクト: moto2002/jiandangjianghu
 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));
 }
コード例 #3
0
ファイル: TarHeader.cs プロジェクト: zzwwqqq/mono
        /// <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...
        }
コード例 #4
0
ファイル: TarHeader.cs プロジェクト: moto2002/jiandangjianghu
        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));
        }