[fpc-devel] zstream, fpc and lazarus
Paul Ishenin
webpirat at mail.ru
Sun Dec 2 10:16:22 CET 2007
Daniƫl Mantione wrote:
> Please copy/paste that help. I can't believe that one would demand that
> a zstream starts from the start of a file; I know no file format which
> works this way, not even gzip.
>
>
delphi help:
"You can call the Seek method with an Offset of zero, and the Origin set
to soFromBeginning. This has the effect of resetting the input stream,
effectively rewinding the stream back to the beginning."
> How does it work in Lazarus? A PNG file does not start with a zstream, it
> is in the middle of the file. If you seek to the start of a PNG file, you
> will read PNG chunks rather than a Zstream.
>
paste from fcl-image\src\fpreadpng.pp:
ZData := TMemoryStream.Create;
try
EndOfFile := false;
while not EndOfFile do
begin
ReadChunk;
HandleChunk;
end;
Decompress := TDecompressionStream.Create (ZData);
try
Decompress.position := 0;
DoDecompress;
finally
Decompress.Free;
end;
So it uses memory stream. It writes data to ZData memory stream, then
creates TDecompressionStream. Do you see ZData.Position = 0 here? I
dont. Code assume that TDecompressionStream.Create will do that. But
TDecompressionStream skips that => we have crash.
Best regards,
Paul Ishenin.
More information about the fpc-devel
mailing list