* skipheader option for decompression

git-svn-id: trunk@6442 -
This commit is contained in:
peter 2007-02-11 20:19:58 +00:00
parent 6741866689
commit 56b380c79e

View File

@ -81,7 +81,7 @@ type
procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer; procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;
OutEstimate: Integer; var OutBuf: Pointer; var OutBytes: Integer); OutEstimate: Integer; var OutBuf: Pointer; var OutBytes: Integer);
public public
constructor Create(ASource: TStream); constructor Create(ASource: TStream; ASkipHeader : Boolean = False);
destructor Destroy; override; destructor Destroy; override;
function Read(var Buffer; Count: Longint): Longint; override; function Read(var Buffer; Count: Longint): Longint; override;
function Write(const Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override;
@ -306,11 +306,14 @@ end;
// TDecompressionStream // TDecompressionStream
constructor TDecompressionStream.Create(ASource: TStream); constructor TDecompressionStream.Create(ASource: TStream; ASkipHeader : Boolean = False);
begin begin
inherited Create(ASource); inherited Create(ASource);
FZRec.next_in := @FBuffer[0]; FZRec.next_in := @FBuffer[0];
DecompressionCheck(inflateInit(FZRec)); If ASkipHeader then
DeCompressionCheck(inflateInit2(FZRec,-MAX_WBITS))
else
DeCompressionCheck(inflateInit(FZRec));
end; end;
destructor TDecompressionStream.Destroy; destructor TDecompressionStream.Destroy;
@ -351,10 +354,10 @@ begin
Progress(Self); Progress(Self);
end; end;
if DeCompressionCheck(inflate(FZRec, 0)) = Z_STREAM_END then if DeCompressionCheck(inflate(FZRec, 0)) = Z_STREAM_END then
begin begin
Result := Count - FZRec.avail_out; Result := Count - FZRec.avail_out;
Exit; Exit;
end; end;
end; end;
Result := Count; Result := Count;
end; end;