Index: src/OFFile.m ================================================================== --- src/OFFile.m +++ src/OFFile.m @@ -528,20 +528,22 @@ } #endif - (void)close { - if (_handle != OF_INVALID_FILE_HANDLE) - closeHandle(_handle); + if (_handle == OF_INVALID_FILE_HANDLE) + @throw [OFNotOpenException exceptionWithObject: self]; + closeHandle(_handle); _handle = OF_INVALID_FILE_HANDLE; [super close]; } - (void)dealloc { - [self close]; + if (_handle != OF_INVALID_FILE_HANDLE) + [self close]; [super dealloc]; } @end Index: src/OFGZIPStream.m ================================================================== --- src/OFGZIPStream.m +++ src/OFGZIPStream.m @@ -63,11 +63,12 @@ return self; } - (void)dealloc { - [self close]; + if (_stream != nil) + [self close]; [_inflateStream release]; [_modificationDate release]; [super dealloc]; @@ -321,11 +322,14 @@ return (super.hasDataInReadBuffer || _stream.hasDataInReadBuffer); } - (void)close { + if (_stream == nil) + @throw [OFNotOpenException exceptionWithObject: self]; + [_stream release]; _stream = nil; [super close]; } @end Index: src/OFHTTPClient.m ================================================================== --- src/OFHTTPClient.m +++ src/OFHTTPClient.m @@ -731,14 +731,14 @@ return self; } - (void)dealloc { - [self close]; + if (_socket != nil) + [self close]; [_handler release]; - [_socket release]; [super dealloc]; } - (size_t)lowlevelWriteBuffer: (const void *)buffer @@ -787,20 +787,22 @@ } - (void)close { if (_socket == nil) - return; + @throw [OFNotOpenException exceptionWithObject: self]; if (_toWrite > 0) @throw [OFTruncatedDataException exception]; _socket.delegate = _handler; [_socket asyncReadLine]; [_socket release]; _socket = nil; + + [super close]; } - (int)fileDescriptorForWriting { return _socket.fileDescriptorForWriting; @@ -819,11 +821,12 @@ return self; } - (void)dealloc { - [_socket release]; + if (_socket != nil) + [self close]; [super dealloc]; } - (void)setHeaders: (OFDictionary *)headers @@ -983,10 +986,13 @@ return (super.hasDataInReadBuffer || _socket.hasDataInReadBuffer); } - (void)close { + if (_socket == nil) + @throw [OFNotOpenException exceptionWithObject: self]; + _atEndOfStream = false; [_socket release]; _socket = nil; Index: src/OFHTTPServer.m ================================================================== --- src/OFHTTPServer.m +++ src/OFHTTPServer.m @@ -248,11 +248,11 @@ } - (void)dealloc { if (_socket != nil) - [self close]; /* includes [_socket release] */ + [self close]; [_server release]; [_request release]; [super dealloc]; @@ -675,11 +675,12 @@ return self; } - (void)dealloc { - [self close]; + if (_socket != nil) + [self close]; [super dealloc]; } - (bool)lowlevelIsAtEndOfStream @@ -718,12 +719,17 @@ return _socket.fileDescriptorForReading; } - (void)close { + if (_socket == nil) + @throw [OFNotOpenException exceptionWithObject: self]; + [_socket release]; _socket = nil; + + [super close]; } @end #ifdef OF_HAVE_THREADS @implementation OFHTTPServerThread Index: src/OFInflateStream.m ================================================================== --- src/OFInflateStream.m +++ src/OFInflateStream.m @@ -206,11 +206,12 @@ return self; } - (void)dealloc { - [self close]; + if (_stream != nil) + [self close]; if (_state == HUFFMAN_TREE) if (_context.huffmanTree.codeLenTree != NULL) of_huffman_tree_release( _context.huffmanTree.codeLenTree); @@ -677,10 +678,13 @@ _bufferLength - _bufferIndex > 0); } - (void)close { + if (_stream == nil) + @throw [OFNotOpenException exceptionWithObject: self]; + /* Give back our buffer to the stream, in case it's shared */ [_stream unreadFromBuffer: _buffer + _bufferIndex length: _bufferLength - _bufferIndex]; _bufferIndex = _bufferLength = 0; Index: src/OFLHAArchive.m ================================================================== --- src/OFLHAArchive.m +++ src/OFLHAArchive.m @@ -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; Index: src/OFLHADecompressingStream.m ================================================================== --- src/OFLHADecompressingStream.m +++ src/OFLHADecompressingStream.m @@ -121,11 +121,12 @@ return self; } - (void)dealloc { - [self close]; + if (_stream != nil) + [self close]; if (_codeLenTree != NULL) of_huffman_tree_release(_codeLenTree); if (_litLenTree != NULL) of_huffman_tree_release(_litLenTree); @@ -514,10 +515,13 @@ _bufferLength - _bufferIndex > 0); } - (void)close { + if (_stream == nil) + @throw [OFNotOpenException exceptionWithObject: self]; + /* Give back our buffer to the stream, in case it's shared */ [_stream unreadFromBuffer: _buffer + _bufferIndex length: _bufferLength - _bufferIndex]; _bytesConsumed -= _bufferLength - _bufferIndex; _bufferIndex = _bufferLength = 0; Index: src/OFProcess.m ================================================================== --- src/OFProcess.m +++ src/OFProcess.m @@ -326,11 +326,16 @@ return self; } - (void)dealloc { - [self close]; +#ifndef OF_WINDOWS + if (_readPipe[0] != -1) +#else + if (_readPipe[0] != NULL) +#endif + [self close]; [super dealloc]; } #ifndef OF_WINDOWS @@ -556,37 +561,37 @@ } - (void)close { #ifndef OF_WINDOWS - if (_readPipe[0] != -1) - close(_readPipe[0]); - if (_writePipe[1] != -1) - close(_writePipe[1]); + if (_readPipe[0] == -1) + @throw [OFNotOpenException exceptionWithObject: self]; + + [self closeForWriting]; + close(_readPipe[0]); if (_pid != -1) { kill(_pid, SIGTERM); waitpid(_pid, &_status, WNOHANG); } _pid = -1; _readPipe[0] = -1; - _writePipe[1] = -1; #else - if (_readPipe[0] != NULL) - CloseHandle(_readPipe[0]); - if (_writePipe[1] != NULL) - CloseHandle(_writePipe[1]); + if (_readPipe[0] == NULL) + @throw [OFNotOpenException exceptionWithObject: self]; + + [self closeForWriting]; + CloseHandle(_readPipe[0]); if (_process != INVALID_HANDLE_VALUE) { TerminateProcess(_process, 0); CloseHandle(_process); } _process = INVALID_HANDLE_VALUE; _readPipe[0] = NULL; - _writePipe[1] = NULL; #endif [super close]; } @end Index: src/OFStdIOStream.m ================================================================== --- src/OFStdIOStream.m +++ src/OFStdIOStream.m @@ -176,11 +176,16 @@ } #endif - (void)dealloc { - [self close]; +#ifndef OF_AMIGAOS + if (_fd != -1) +#else + if (_handle != 0) +#endif + [self close]; [super dealloc]; } - (bool)lowlevelIsAtEndOfStream @@ -299,16 +304,20 @@ #endif - (void)close { #ifndef OF_AMIGAOS - if (_fd != -1) - close(_fd); + if (_fd == -1) + @throw [OFNotOpenException exceptionWithObject: self]; + close(_fd); _fd = -1; #else - if (_closable && _handle != 0) + if (_handle == 0) + @throw [OFNotOpenException exceptionWithObject: self]; + + if (_closable) Close(_handle); _handle = 0; #endif Index: src/OFStreamSocket.m ================================================================== --- src/OFStreamSocket.m +++ src/OFStreamSocket.m @@ -175,14 +175,10 @@ - (void)close { if (_socket == INVALID_SOCKET) @throw [OFNotOpenException exceptionWithObject: self]; -#ifdef OF_HAVE_SOCKETS - [self cancelAsyncRequests]; -#endif - closesocket(_socket); _socket = INVALID_SOCKET; _atEndOfStream = false; Index: src/OFTarArchive.m ================================================================== --- src/OFTarArchive.m +++ src/OFTarArchive.m @@ -294,11 +294,12 @@ return self; } - (void)dealloc { - [self close]; + if (_stream != nil) + [self close]; [_entry release]; [super dealloc]; } @@ -352,10 +353,13 @@ .fileDescriptorForReading; } - (void)close { + if (_stream == nil) + @throw [OFNotOpenException exceptionWithObject: self]; + [self of_skip]; [_stream release]; _stream = nil; @@ -427,11 +431,12 @@ return self; } - (void)dealloc { - [self close]; + if (_stream != nil) + [self close]; [_entry release]; [super dealloc]; } @@ -474,17 +479,19 @@ .fileDescriptorForWriting; } - (void)close { + uint64_t remainder; + if (_stream == nil) - return; - - uint64_t remainder = 512 - _entry.size % 512; + @throw [OFNotOpenException exceptionWithObject: self]; if (_toWrite > 0) @throw [OFTruncatedDataException exception]; + + remainder = 512 - _entry.size % 512; if (remainder != 512) { bool wasWriteBuffered = _stream.writeBuffered; [_stream setWriteBuffered: true]; Index: src/OFZIPArchive.m ================================================================== --- src/OFZIPArchive.m +++ src/OFZIPArchive.m @@ -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