protected ZiPatchChunk(ChecksumBinaryReader reader, int offset, int size) { this.Reader = reader; Offset = offset; Size = size; }
public static ZiPatchChunk GetCommand(ChecksumBinaryReader reader, int offset, int size) { try { // Have not seen this differ from size var innerSize = reader.ReadInt32BE(); if (size != innerSize) { throw new ZiPatchException(); } var command = reader.ReadFixedLengthString(1u); if (!CommandTypes.TryGetValue(command, out var constructor)) { throw new ZiPatchException(); } var chunk = constructor(reader, offset, innerSize - 5); return(chunk); } catch (EndOfStreamException e) { throw new ZiPatchException("Could not get command", e); } }
public static ZiPatchChunk GetChunk(Stream stream) { localMemoryStream.Value = localMemoryStream.Value ?? new MemoryStream(); var memoryStream = localMemoryStream.Value; try { var reader = new BinaryReader(stream); var size = reader.ReadInt32BE(); var baseOffset = (int)stream.Position; // size of chunk + header + checksum var readSize = size + 4 + 4; // Enlarge MemoryStream if necessary, or set length at capacity var maxLen = Math.Max(readSize, memoryStream.Capacity); if (memoryStream.Length < maxLen) { memoryStream.SetLength(maxLen); } // Read into MemoryStream's inner buffer reader.BaseStream.Read(memoryStream.GetBuffer(), 0, readSize); var binaryReader = new ChecksumBinaryReader(memoryStream); binaryReader.InitCrc32(); var type = binaryReader.ReadFixedLengthString(4u); if (!ChunkTypes.TryGetValue(type, out var constructor)) { throw new ZiPatchException(); } var chunk = constructor(binaryReader, baseOffset, size); chunk.ReadChunk(); chunk.ReadChecksum(); return(chunk); } catch (EndOfStreamException e) { throw new ZiPatchException("Could not get chunk", e); } finally { memoryStream.Position = 0; } }
public FileHeaderChunk(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size) { }
public SqpkAddData(ChecksumBinaryReader reader, int size) : base(reader, size) { }
public SqpkPatchInfo(ChecksumBinaryReader reader, int size) : base(reader, size) { }
public XXXXChunk(ChecksumBinaryReader reader, int size) : base(reader, size) { }
public ApplyOptionChunk(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size) { }
public SqpkDeleteData(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size) { }
public ApplyFreeSpaceChunk(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size) { }
public DeleteDirectoryChunk(ChecksumBinaryReader reader, int size) : base(reader, size) { }
public EndOfFileChunk(ChecksumBinaryReader reader, int size) : base(reader, size) { }
public AddDirectoryChunk(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size) {}
protected ZiPatchChunk(ChecksumBinaryReader reader, int size) { this.reader = reader; Size = size; }
public SqpkFile(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size) { }
protected SqpkChunk(ChecksumBinaryReader reader, int offset, int size) : base(reader, offset, size) { }
public SqpkTargetInfo(ChecksumBinaryReader reader, int size) : base(reader, size) { }
public SqpkIndex(ChecksumBinaryReader reader, int size) : base(reader, size) { }