@@ -38,42 +38,42 @@ #import "OFTruncatedDataException.h" #import "OFWriteFailedException.h" @interface OFLHAArchive_FileReadStream: OFStream { - OF_KINDOF(OFStream *) _stream; - OF_KINDOF(OFStream *) _decompressedStream; + OFStream *_stream; + OFStream *_decompressedStream; OFLHAArchiveEntry *_entry; uint32_t _toRead, _bytesConsumed; uint16_t _CRC16; bool _atEndOfStream, _skipped; } -- (instancetype)of_initWithStream: (OF_KINDOF(OFStream *))stream +- (instancetype)of_initWithStream: (OFStream *)stream entry: (OFLHAArchiveEntry *)entry; - (void)of_skip; @end @interface OFLHAArchive_FileWriteStream: OFStream { OFMutableLHAArchiveEntry *_entry; of_string_encoding_t _encoding; - OF_KINDOF(OFStream *) _stream; + OFSeekableStream *_stream; of_offset_t _headerOffset; uint32_t _bytesWritten; uint16_t _CRC16; } -- (instancetype)of_initWithStream: (OF_KINDOF(OFStream *))stream +- (instancetype)of_initWithStream: (OFSeekableStream *)stream entry: (OFLHAArchiveEntry *)entry encoding: (of_string_encoding_t)encoding; @end @implementation OFLHAArchive @synthesize encoding = _encoding; -+ (instancetype)archiveWithStream: (OF_KINDOF(OFStream *))stream ++ (instancetype)archiveWithStream: (OFStream *)stream mode: (OFString *)mode { return [[[self alloc] initWithStream: stream mode: mode] autorelease]; } @@ -90,11 +90,11 @@ - (instancetype)init { OF_INVALID_INIT_METHOD } -- (instancetype)initWithStream: (OF_KINDOF(OFStream *))stream +- (instancetype)initWithStream: (OFStream *)stream mode: (OFString *)mode { self = [super init]; @try { @@ -113,12 +113,12 @@ _mode == OF_LHA_ARCHIVE_MODE_APPEND) && ![_stream isKindOfClass: [OFSeekableStream class]]) @throw [OFInvalidArgumentException exception]; if (_mode == OF_LHA_ARCHIVE_MODE_APPEND) - [_stream seekToOffset: 0 - whence: SEEK_END]; + [(OFSeekableStream *)_stream seekToOffset: 0 + whence: SEEK_END]; _encoding = OF_STRING_ENCODING_ISO_8859_1; } @catch (id e) { [self release]; @throw e; @@ -165,17 +165,17 @@ size_t headerLen; if (_mode != OF_LHA_ARCHIVE_MODE_READ) @throw [OFInvalidArgumentException exception]; - [_lastReturnedStream of_skip]; + [(OFLHAArchive_FileReadStream *)_lastReturnedStream of_skip]; [_lastReturnedStream close]; [_lastReturnedStream release]; _lastReturnedStream = nil; for (headerLen = 0; headerLen < 21;) { - if ([_stream isAtEndOfStream]) { + if (_stream.atEndOfStream) { if (headerLen == 0) return nil; if (headerLen == 1 && header[0] == 0) return nil; @@ -205,11 +205,12 @@ @throw [OFInvalidArgumentException exception]; if (_lastReturnedStream == nil) @throw [OFInvalidArgumentException exception]; - return [[_lastReturnedStream retain] autorelease]; + return [[(OFLHAArchive_FileReadStream *)_lastReturnedStream + retain] autorelease]; } - (OFStream *) streamForWritingEntry: (OFLHAArchiveEntry *)entry { @@ -217,11 +218,11 @@ if (_mode != OF_LHA_ARCHIVE_MODE_WRITE && _mode != OF_LHA_ARCHIVE_MODE_APPEND) @throw [OFInvalidArgumentException exception]; - compressionMethod = [entry compressionMethod]; + compressionMethod = entry.compressionMethod; if (![compressionMethod isEqual: @"-lh0-"] && ![compressionMethod isEqual: @"-lhd-"]) @throw [OFNotImplementedException exceptionWithSelector: _cmd object: self]; @@ -229,15 +230,16 @@ [_lastReturnedStream close]; [_lastReturnedStream release]; _lastReturnedStream = nil; _lastReturnedStream = [[OFLHAArchive_FileWriteStream alloc] - of_initWithStream: _stream + of_initWithStream: (OFSeekableStream *)_stream entry: entry encoding: _encoding]; - return [[_lastReturnedStream retain] autorelease]; + return [[(OFLHAArchive_FileWriteStream *)_lastReturnedStream + retain] autorelease]; } - (void)close { if (_stream == nil) @@ -251,21 +253,21 @@ _stream = nil; } @end @implementation OFLHAArchive_FileReadStream -- (instancetype)of_initWithStream: (OF_KINDOF(OFStream *))stream +- (instancetype)of_initWithStream: (OFStream *)stream entry: (OFLHAArchiveEntry *)entry { self = [super init]; @try { OFString *compressionMethod; _stream = [stream retain]; - compressionMethod = [entry compressionMethod]; + compressionMethod = entry.compressionMethod; if ([compressionMethod isEqual: @"-lh4-"] || [compressionMethod isEqual: @"-lh5-"]) _decompressedStream = [[OFLHAArchive_LHStream alloc] of_initWithStream: stream @@ -283,11 +285,11 @@ dictionaryBits: 17]; else _decompressedStream = [stream retain]; _entry = [entry copy]; - _toRead = [entry uncompressedSize]; + _toRead = entry.uncompressedSize; } @catch (id e) { [self release]; @throw e; } @@ -322,12 +324,11 @@ @throw [OFNotOpenException exceptionWithObject: self]; if (_atEndOfStream) return 0; - if ([_stream isAtEndOfStream] && - ![_decompressedStream hasDataInReadBuffer]) + if (_stream.atEndOfStream && !_decompressedStream.hasDataInReadBuffer) @throw [OFTruncatedDataException exception]; if (length > _toRead) length = _toRead; @@ -338,15 +339,15 @@ _CRC16 = of_crc16(_CRC16, buffer, ret); if (_toRead == 0) { _atEndOfStream = true; - if (_CRC16 != [_entry CRC16]) { + if (_CRC16 != _entry.CRC16) { OFString *actualChecksum = [OFString stringWithFormat: @"%04" PRIX16, _CRC16]; OFString *expectedChecksum = [OFString stringWithFormat: - @"%04" PRIX16, [_entry CRC16]]; + @"%04" PRIX16, _entry.CRC16]; @throw [OFChecksumMismatchException exceptionWithActualChecksum: actualChecksum expectedChecksum: expectedChecksum]; } @@ -355,22 +356,23 @@ return ret; } - (bool)hasDataInReadBuffer { - return ([super hasDataInReadBuffer] || - [_decompressedStream hasDataInReadBuffer]); + return (super.hasDataInReadBuffer || + _decompressedStream.hasDataInReadBuffer); } - (int)fileDescriptorForReading { - return [_decompressedStream fileDescriptorForReading]; + return ((id )_decompressedStream) + .fileDescriptorForReading; } - (void)of_skip { - OF_KINDOF(OFStream *) stream; + OFStream *stream; uint32_t toRead; if (_stream == nil || _skipped) return; @@ -381,22 +383,23 @@ * Get the number of consumed bytes and directly read from the * compressed stream, to make skipping much faster. */ if ([_decompressedStream isKindOfClass: [OFLHAArchive_LHStream class]]) { - OFLHAArchive_LHStream *LHStream = _decompressedStream; + OFLHAArchive_LHStream *LHStream = + (OFLHAArchive_LHStream *)_decompressedStream; [LHStream close]; - toRead = [_entry compressedSize] - LHStream->_bytesConsumed; + toRead = _entry.compressedSize - LHStream->_bytesConsumed; stream = _stream; } if ([stream isKindOfClass: [OFSeekableStream class]] && (sizeof(of_offset_t) > 4 || toRead < INT32_MAX)) - [stream seekToOffset: (of_offset_t)toRead - whence: SEEK_CUR]; + [(OFSeekableStream *)stream seekToOffset: (of_offset_t)toRead + whence: SEEK_CUR]; else { while (toRead > 0) { char buffer[512]; size_t min = toRead; @@ -425,11 +428,11 @@ [super close]; } @end @implementation OFLHAArchive_FileWriteStream -- (instancetype)of_initWithStream: (OF_KINDOF(OFStream *))stream +- (instancetype)of_initWithStream: (OFSeekableStream *)stream entry: (OFLHAArchiveEntry *)entry encoding: (of_string_encoding_t)encoding { self = [super init]; @@ -477,12 +480,12 @@ @try { bytesWritten = (uint32_t)[_stream writeBuffer: buffer length: length]; } @catch (OFWriteFailedException *e) { - _bytesWritten += [e bytesWritten]; - _CRC16 = of_crc16(_CRC16, buffer, [e bytesWritten]); + _bytesWritten += e.bytesWritten; + _CRC16 = of_crc16(_CRC16, buffer, e.bytesWritten); @throw e; } _bytesWritten += (uint32_t)bytesWritten; @@ -494,28 +497,29 @@ - (bool)lowlevelIsAtEndOfStream { if (_stream == nil) @throw [OFNotOpenException exceptionWithObject: self]; - return [_stream isAtEndOfStream]; + return _stream.atEndOfStream; } - (int)fileDescriptorForWriting { - return [_stream fileDescriptorForWriting]; + return ((id )_stream) + .fileDescriptorForWriting; } - (void)close { of_offset_t offset; if (_stream == nil) return; - [_entry setUncompressedSize: _bytesWritten]; - [_entry setCompressedSize: _bytesWritten]; - [_entry setCRC16: _CRC16]; + _entry.uncompressedSize = _bytesWritten; + _entry.compressedSize = _bytesWritten; + _entry.CRC16 = _CRC16; offset = [_stream seekToOffset: 0 whence:SEEK_CUR]; [_stream seekToOffset: _headerOffset whence: SEEK_SET];