@@ -24,77 +24,74 @@ #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" #import "OFOutOfRangeException.h" -extern uint32_t of_zip_archive_read_field32(const uint8_t **, uint16_t *); -extern uint64_t of_zip_archive_read_field64(const uint8_t **, uint16_t *); - OFString * -of_zip_archive_entry_version_to_string(uint16_t version) +OFZIPArchiveEntryVersionToString(uint16_t version) { const char *attrCompat = NULL; switch (version >> 8) { - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_MSDOS: + case OFZIPArchiveEntryAttributeCompatibilityMSDOS: attrCompat = "MS-DOS or OS/2"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_AMIGA: + case OFZIPArchiveEntryAttributeCompatibilityAmiga: attrCompat = "Amiga"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_OPENVMS: + case OFZIPArchiveEntryAttributeCompatibilityOpenVMS: attrCompat = "OpenVMS"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_UNIX: + case OFZIPArchiveEntryAttributeCompatibilityUNIX: attrCompat = "UNIX"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_VM_CMS: + case OFZIPArchiveEntryAttributeCompatibilityVM_CMS: attrCompat = "VM/CMS"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_ATARI_ST: + case OFZIPArchiveEntryAttributeCompatibilityAtariST: attrCompat = "Atari ST"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_OS2_HPFS: + case OFZIPArchiveEntryAttributeCompatibilityOS2HPFS: attrCompat = "OS/2 HPFS"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_MACINTOSH: + case OFZIPArchiveEntryAttributeCompatibilityMacintosh: attrCompat = "Macintosh"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_Z_SYSTEM: + case OFZIPArchiveEntryAttributeCompatibilityZSystem: attrCompat = "Z-System"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_CP_M: + case OFZIPArchiveEntryAttributeCompatibilityCPM: attrCompat = "CP/M"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_WINDOWS_NTFS: + case OFZIPArchiveEntryAttributeCompatibilityWindowsNTFS: attrCompat = "Windows NTFS"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_MVS: + case OFZIPArchiveEntryAttributeCompatibilityMVS: attrCompat = "MVS (OS/390 - Z/OS)"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_VSE: + case OFZIPArchiveEntryAttributeCompatibilityVSE: attrCompat = "VSE"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_ACORN_RISC_OS: + case OFZIPArchiveEntryAttributeCompatibilityAcornRISCOS: attrCompat = "Acorn RISC OS"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_VFAT: + case OFZIPArchiveEntryAttributeCompatibilityVFAT: attrCompat = "VFAT"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_ALTERNATE_MVS: + case OFZIPArchiveEntryAttributeCompatibilityAlternateMVS: attrCompat = "Alternate MVS"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_BEOS: + case OFZIPArchiveEntryAttributeCompatibilityBeOS: attrCompat = "BeOS"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_TANDEM: + case OFZIPArchiveEntryAttributeCompatibilityTandem: attrCompat = "Tandem"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_OS_400: + case OFZIPArchiveEntryAttributeCompatibilityOS400: attrCompat = "OS/400"; break; - case OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_OS_X: + case OFZIPArchiveEntryAttributeCompatibilityOSX: attrCompat = "OS X (Darwin)"; break; } if (attrCompat != NULL) @@ -106,47 +103,48 @@ @"%u.%u, unknown %02X", (version % 0xFF) / 10, (version & 0xFF) % 10, version >> 8]; } OFString * -of_zip_archive_entry_compression_method_to_string(uint16_t compressionMethod) +OFZIPArchiveEntryCompressionMethodName( + OFZIPArchiveEntryCompressionMethod compressionMethod) { switch (compressionMethod) { - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_NONE: + case OFZIPArchiveEntryCompressionMethodNone: return @"none"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_SHRINK: + case OFZIPArchiveEntryCompressionMethodShrink: return @"Shrink"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_REDUCE_FACTOR_1: + case OFZIPArchiveEntryCompressionMethodReduceFactor1: return @"Reduce (factor 1)"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_REDUCE_FACTOR_2: + case OFZIPArchiveEntryCompressionMethodReduceFactor2: return @"Reduce (factor 2)"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_REDUCE_FACTOR_3: + case OFZIPArchiveEntryCompressionMethodReduceFactor3: return @"Reduce (factor 3)"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_REDUCE_FACTOR_4: + case OFZIPArchiveEntryCompressionMethodReduceFactor4: return @"Reduce (factor 4)"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_IMPLODE: + case OFZIPArchiveEntryCompressionMethodImplode: return @"Implode"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_DEFLATE: + case OFZIPArchiveEntryCompressionMethodDeflate: return @"Deflate"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_DEFLATE64: + case OFZIPArchiveEntryCompressionMethodDeflate64: return @"Deflate64"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_BZIP2: + case OFZIPArchiveEntryCompressionMethodBZIP2: return @"BZip2"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_LZMA: + case OFZIPArchiveEntryCompressionMethodLZMA: return @"LZMA"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_WAVPACK: + case OFZIPArchiveEntryCompressionMethodWavPack: return @"WavPack"; - case OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_PPMD: + case OFZIPArchiveEntryCompressionMethodPPMd: return @"PPMd"; default: return @"unknown"; } } size_t -of_zip_archive_entry_extra_field_find(OFData *extraField, uint16_t tag, - uint16_t *size) +OFZIPArchiveEntryExtraFieldFind(OFData *extraField, + OFZIPArchiveEntryExtraFieldTag tag, uint16_t *size) { const uint8_t *bytes = extraField.items; size_t count = extraField.count; for (size_t i = 0; i < count;) { @@ -168,11 +166,11 @@ i += 4 + currentSize; } *size = 0; - return OF_NOT_FOUND; + return OFNotFound; } @implementation OFZIPArchiveEntry + (instancetype)entryWithFileName: (OFString *)fileName { @@ -211,11 +209,11 @@ @try { void *pool = objc_autoreleasePoolPush(); OFMutableData *extraField = nil; uint16_t fileNameLength, extraFieldLength, fileCommentLength; - of_string_encoding_t encoding; + OFStringEncoding encoding; size_t ZIP64Index; uint16_t ZIP64Size; if ([stream readLittleEndianInt32] != 0x02014B50) @throw [OFInvalidFormatException exception]; @@ -236,12 +234,11 @@ _internalAttributes = [stream readLittleEndianInt16]; _versionSpecificAttributes = [stream readLittleEndianInt32]; _localFileHeaderOffset = [stream readLittleEndianInt32]; encoding = (_generalPurposeBitFlag & (1u << 11) - ? OF_STRING_ENCODING_UTF_8 - : OF_STRING_ENCODING_CODEPAGE_437); + ? OFStringEncodingUTF8 : OFStringEncodingCodepage437); _fileName = [[stream readStringWithLength: fileNameLength encoding: encoding] copy]; if (extraFieldLength > 0) extraField = [[[stream readDataWithCount: @@ -249,31 +246,30 @@ if (fileCommentLength > 0) _fileComment = [[stream readStringWithLength: fileCommentLength encoding: encoding] copy]; - ZIP64Index = of_zip_archive_entry_extra_field_find(extraField, - OF_ZIP_ARCHIVE_ENTRY_EXTRA_FIELD_ZIP64, &ZIP64Size); + ZIP64Index = OFZIPArchiveEntryExtraFieldFind(extraField, + OFZIPArchiveEntryExtraFieldTagZIP64, &ZIP64Size); - if (ZIP64Index != OF_NOT_FOUND) { + if (ZIP64Index != OFNotFound) { const uint8_t *ZIP64 = [extraField itemAtIndex: ZIP64Index]; - of_range_t range = - of_range(ZIP64Index - 4, ZIP64Size + 4); + OFRange range = + OFRangeMake(ZIP64Index - 4, ZIP64Size + 4); if (_uncompressedSize == 0xFFFFFFFF) - _uncompressedSize = of_zip_archive_read_field64( + _uncompressedSize = OFZIPArchiveReadField64( &ZIP64, &ZIP64Size); if (_compressedSize == 0xFFFFFFFF) - _compressedSize = of_zip_archive_read_field64( + _compressedSize = OFZIPArchiveReadField64( &ZIP64, &ZIP64Size); if (_localFileHeaderOffset == 0xFFFFFFFF) _localFileHeaderOffset = - of_zip_archive_read_field64(&ZIP64, - &ZIP64Size); + OFZIPArchiveReadField64(&ZIP64, &ZIP64Size); if (_startDiskNumber == 0xFFFF) - _startDiskNumber = of_zip_archive_read_field32( + _startDiskNumber = OFZIPArchiveReadField32( &ZIP64, &ZIP64Size); if (ZIP64Size > 0 || _localFileHeaderOffset < 0) @throw [OFInvalidFormatException exception]; @@ -350,16 +346,16 @@ - (OFData *)extraField { return _extraField; } -- (uint16_t)versionMadeBy +- (OFZIPArchiveEntryAttributeCompatibility)versionMadeBy { return _versionMadeBy; } -- (uint16_t)minVersionNeeded +- (OFZIPArchiveEntryAttributeCompatibility)minVersionNeeded { return _minVersionNeeded; } - (OFDate *)modificationDate @@ -384,11 +380,11 @@ objc_autoreleasePoolPop(pool); return [date autorelease]; } -- (uint16_t)compressionMethod +- (OFZIPArchiveEntryCompressionMethod)compressionMethod { return _compressionMethod; } - (uint64_t)compressedSize @@ -433,12 +429,11 @@ - (OFString *)description { void *pool = objc_autoreleasePoolPush(); OFString *compressionMethod = - of_zip_archive_entry_compression_method_to_string( - _compressionMethod); + OFZIPArchiveEntryCompressionMethodName(_compressionMethod); OFString *ret = [OFString stringWithFormat: @"<%@:\n" @"\tFile name = %@\n" @"\tFile comment = %@\n" @"\tGeneral purpose bit flag = %u\n" @@ -489,11 +484,11 @@ size += (4 + (6 * 2) + (3 * 4) + (5 * 2) + (2 * 4)); [stream writeString: _fileName]; size += (uint64_t)_fileName.UTF8StringLength; - [stream writeLittleEndianInt16: OF_ZIP_ARCHIVE_ENTRY_EXTRA_FIELD_ZIP64]; + [stream writeLittleEndianInt16: OFZIPArchiveEntryExtraFieldTagZIP64]; [stream writeLittleEndianInt16: 28]; [stream writeLittleEndianInt64: _uncompressedSize]; [stream writeLittleEndianInt64: _compressedSize]; [stream writeLittleEndianInt64: _localFileHeaderOffset]; [stream writeLittleEndianInt32: _startDiskNumber];