Example #1
0
        public Metadata(BinaryReader reader)
        {
            magic = reader.ReadUInt32();
            if (magic != 0x424A5342)
                return;

            offset = (uint)reader.BaseStream.Position - 4;
            majorVersion = reader.ReadUInt16();
            minorVersion = reader.ReadUInt16();
            reserved = reader.ReadUInt32();
            versionString = readString(reader, reader.ReadInt32());
            flags = reader.ReadUInt16();
            int numStreams = reader.ReadUInt16();
            streams = new DotNetStream[numStreams];
            uint lastOffset = offset;
            for (int i = 0; i < numStreams; i++) {
                uint fileOffset = offset + reader.ReadUInt32();
                uint size = reader.ReadUInt32();
                string name = readAsciizString(reader);
                streams[i] = new DotNetStream(name, fileOffset, size);
                lastOffset = Math.Max(lastOffset, fileOffset + size);
            }
            lastOffset = Math.Max(lastOffset, (uint)reader.BaseStream.Position);
            length = lastOffset - offset;
            headerLength = (uint)reader.BaseStream.Position - offset;
        }
Example #2
0
        public Metadata(BinaryReader reader)
        {
            magic = reader.ReadUInt32();
            if (magic != 0x424A5342)
            {
                return;
            }

            offset        = (uint)reader.BaseStream.Position - 4;
            majorVersion  = reader.ReadUInt16();
            minorVersion  = reader.ReadUInt16();
            reserved      = reader.ReadUInt32();
            versionString = readString(reader, reader.ReadInt32());
            flags         = reader.ReadUInt16();
            int numStreams = reader.ReadUInt16();

            streams = new DotNetStream[numStreams];
            uint lastOffset = offset;

            for (int i = 0; i < numStreams; i++)
            {
                uint   fileOffset = offset + reader.ReadUInt32();
                uint   size       = reader.ReadUInt32();
                string name       = readAsciizString(reader);
                streams[i] = new DotNetStream(name, fileOffset, size);
                lastOffset = Math.Max(lastOffset, fileOffset + size);
            }
            lastOffset   = Math.Max(lastOffset, (uint)reader.BaseStream.Position);
            length       = lastOffset - offset;
            headerLength = (uint)reader.BaseStream.Position - offset;
        }