@@ -246,11 +246,12 @@ } #endif - (void)dealloc { - [self close]; + if (_stream != nil) + [self close]; [_stream release]; [_archiveComment release]; [_entries release]; [_pathToEntryMap release]; @@ -615,11 +616,11 @@ } - (void)close { if (_stream == nil) - return; + @throw [OFNotOpenException exceptionWithObject: self]; [self of_closeLastReturnedStream]; if (_mode == OF_ZIP_ARCHIVE_MODE_WRITE || _mode == OF_ZIP_ARCHIVE_MODE_APPEND) @@ -768,14 +769,13 @@ return self; } - (void)dealloc { - [self close]; + if (_stream != nil || _decompressedStream != nil) + [self close]; - [_stream release]; - [_decompressedStream release]; [_entry release]; [super dealloc]; } @@ -845,10 +845,13 @@ .fileDescriptorForReading; } - (void)close { + if (_stream == nil || _decompressedStream == nil) + @throw [OFNotOpenException exceptionWithObject: self]; + [_stream release]; _stream = nil; [_decompressedStream release]; _decompressedStream = nil; @@ -870,13 +873,13 @@ return self; } - (void)dealloc { - [self close]; + if (_stream != nil) + [self close]; - [_stream release]; [_entry release]; [super dealloc]; } @@ -903,11 +906,11 @@ } - (void)close { if (_stream == nil) - return; + @throw [OFNotOpenException exceptionWithObject: self]; [_stream writeLittleEndianInt32: 0x08074B50]; [_stream writeLittleEndianInt32: _CRC32]; [_stream writeLittleEndianInt64: _bytesWritten]; [_stream writeLittleEndianInt64: _bytesWritten]; @@ -919,7 +922,9 @@ _entry.compressedSize = _bytesWritten; _entry.uncompressedSize = _bytesWritten; [_entry makeImmutable]; _bytesWritten += (2 * 4 + 2 * 8); + + [super close]; } @end