@@ -150,11 +150,12 @@ } #endif - (void)dealloc { - [self close]; + if (_stream != nil) + [self close]; [super dealloc]; } - (OFLHAArchiveEntry *)nextEntry @@ -240,11 +241,11 @@ } - (void)close { if (_stream == nil) - return; + @throw [OFNotOpenException exceptionWithObject: self]; [_lastReturnedStream close]; [_lastReturnedStream release]; _lastReturnedStream = nil; @@ -295,14 +296,13 @@ return self; } - (void)dealloc { - [self close]; + if (_stream != nil || _decompressedStream != nil) + [self close]; - [_stream release]; - [_decompressedStream release]; [_entry release]; [super dealloc]; } @@ -415,10 +415,13 @@ _skipped = true; } - (void)close { + if (_stream == nil || _decompressedStream == nil) + @throw [OFNotOpenException exceptionWithObject: self]; + [self of_skip]; [_stream release]; _stream = nil; @@ -458,11 +461,12 @@ return self; } - (void)dealloc { - [self close]; + if (_stream != nil) + [self close]; [_entry release]; [super dealloc]; } @@ -511,11 +515,11 @@ - (void)close { of_offset_t offset; if (_stream == nil) - return; + @throw [OFNotOpenException exceptionWithObject: self]; _entry.uncompressedSize = _bytesWritten; _entry.compressedSize = _bytesWritten; _entry.CRC16 = _CRC16;