Esempio n. 1
0
        /// <inheritdoc/>
        public override bool Read()
        {
            this.EnsureMagicRead();

            if (this.EntryStream != null)
            {
                this.EntryStream.Dispose();
            }

            this.Align(2);

            if (this.Stream.Position == this.Stream.Length)
            {
                return(false);
            }

            this.entryHeader = this.Stream.ReadStruct <ArHeader>();
            this.FileHeader  = this.entryHeader;
            this.FileName    = this.entryHeader.FileName;

            if (this.entryHeader.EndChar != "`\n")
            {
                throw new InvalidDataException("The magic for the file entry is invalid");
            }

            this.EntryStream = new SubStream(this.Stream, this.Stream.Position, this.entryHeader.FileSize, leaveParentOpen: true);

            return(true);
        }
 public static void WriteEntry(Stream output, ArHeader header, Stream data)
 {
     output.WriteStruct(header);
     data.CopyTo(output);
     if (output.Position % 2 != 0)
     {
         output.WriteByte(0);
     }
 }
        public static void WriteEntry(Stream output, string name, LinuxFileMode mode, Stream data)
        {
            var hdr = new ArHeader
            {
                EndChar      = "`\n",
                FileMode     = mode,
                FileName     = name,
                FileSize     = (uint)data.Length,
                GroupId      = 0,
                OwnerId      = 0,
                LastModified = DateTimeOffset.UtcNow
            };

            WriteEntry(output, hdr, data);
        }