[fpc-pascal] destructor TDecompressionStream.Destroy question

Michael Van Canneyt michael at freepascal.org
Fri Sep 21 08:55:39 CEST 2007



On Thu, 20 Sep 2007, David Mears wrote:

> from fpc/packages/fcl-base/src/inc/zstream.pp
> 
> I'm not really sure why this is in the destructor for tdecompressionstream.
> 
>   if FZRec.avail_in <> 0 then
>     Source.Seek(-FZRec.avail_in, soFromCurrent);

To reposition the source stream on the last actually read data.

 
> my tdecompressionstream  is fed by a tideadecryptstream - when
> tdecompressionstream is freed it causes that seek in the decrypt for
> some reason? , which isn't supported by the tdecryptionstream and it
> throws a EIDEAError - or is there a problem with the source stream? 

No, this is "normal".

> 
> generally I feel that exceptions are somehow uncivilized, so avoiding
> one so totally unnecessary  (in context, at least) would be appreciated.

I'll introduce a property in TDecompressionstream: 'SourceSeekable' or so
which can be used to control the behaviour.

Another solution is to implement a long-standing idea of mine: 

to introduce a property in TStream:
  StreamCapabilities : TStreamCapabilities;
with
  TStreamCapability = (scSeekForward,scSeekBackward,scRead,scWrite,scSize);
  TStreamCapabilities = set of TStreamCapability;

I think I'll go for the latter one.

Michael.



More information about the fpc-pascal mailing list