Browse Source

* skipheader option for decompression

git-svn-id: trunk@6442 -
peter 18 years ago
parent
commit
56b380c79e
1 changed files with 10 additions and 7 deletions
  1. 10 7
      fcl/inc/zstream.pp

+ 10 - 7
fcl/inc/zstream.pp

@@ -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
-	  Result := Count - FZRec.avail_out;
-	  Exit;
-	end;
+        begin
+          Result := Count - FZRec.avail_out;
+          Exit;
+        end;
   end;
   end;
   Result := Count;
   Result := Count;
 end;
 end;