@@ -39,18 +39,16 @@ static void setPermissions(OFString *path, OFZIPArchiveEntry *entry) { #ifdef OF_FILE_MANAGER_SUPPORTS_PERMISSIONS if ((entry.versionMadeBy >> 8) == - OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_UNIX) { + OFZIPArchiveEntryAttributeCompatibilityUNIX) { OFNumber *mode = [OFNumber numberWithUnsignedShort: (entry.versionSpecificAttributes >> 16) & 0777]; - of_file_attribute_key_t key = - of_file_attribute_key_posix_permissions; - of_file_attributes_t attributes = [OFDictionary + OFFileAttributes attributes = [OFDictionary dictionaryWithObject: mode - forKey: key]; + forKey: OFFilePOSIXPermissions]; [[OFFileManager defaultManager] setAttributes: attributes ofItemAtPath: path]; } #endif @@ -58,18 +56,18 @@ static void setModificationDate(OFString *path, OFZIPArchiveEntry *entry) { OFDate *modificationDate = entry.modificationDate; - of_file_attributes_t attributes; + OFFileAttributes attributes; if (modificationDate == nil) return; attributes = [OFDictionary dictionaryWithObject: modificationDate - forKey: of_file_attribute_key_modification_date]; + forKey: OFFileModificationDate]; [[OFFileManager defaultManager] setAttributes: attributes ofItemAtPath: path]; } @implementation ZIPArchive @@ -79,20 +77,20 @@ app = (OFArc *)[OFApplication sharedApplication].delegate; } + (instancetype)archiveWithStream: (OF_KINDOF(OFStream *))stream mode: (OFString *)mode - encoding: (of_string_encoding_t)encoding + encoding: (OFStringEncoding)encoding { return [[[self alloc] initWithStream: stream mode: mode encoding: encoding] autorelease]; } - (instancetype)initWithStream: (OF_KINDOF(OFStream *))stream mode: (OFString *)mode - encoding: (of_string_encoding_t)encoding + encoding: (OFStringEncoding)encoding { self = [super init]; @try { _archive = [[OFZIPArchive alloc] initWithStream: stream @@ -115,90 +113,91 @@ - (void)listFiles { for (OFZIPArchiveEntry *entry in _archive.entries) { void *pool = objc_autoreleasePoolPush(); - [of_stdout writeLine: entry.fileName]; + [OFStdOut writeLine: entry.fileName]; if (app->_outputLevel >= 1) { OFString *compressedSize = [OFString stringWithFormat: @"%" PRIu64, entry.compressedSize]; OFString *uncompressedSize = [OFString stringWithFormat: @"%" PRIu64, entry.uncompressedSize]; OFString *compressionMethod = - of_zip_archive_entry_compression_method_to_string( + OFZIPArchiveEntryCompressionMethodName( entry.compressionMethod); OFString *CRC32 = [OFString stringWithFormat: @"%08" PRIX32, entry.CRC32]; OFString *modificationDate = [entry.modificationDate localDateStringWithFormat: @"%Y-%m-%d %H:%M:%S"]; - [of_stdout writeString: @"\t"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\t"]; + [OFStdOut writeLine: OF_LOCALIZED( @"list_compressed_size", @"[" @" 'Compressed: '," @" [" @" {'size == 1': '1 byte'}," @" {'': '%[size] bytes'}" @" ]" @"]".objectByParsingJSON, @"size", compressedSize)]; - [of_stdout writeString: @"\t"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\t"]; + [OFStdOut writeLine: OF_LOCALIZED( @"list_uncompressed_size", @"[" @" 'Uncompressed: '," @" [" @" {'size == 1': '1 byte'}," @" {'': '%[size] bytes'}" @" ]" @"]".objectByParsingJSON, @"size", uncompressedSize)]; - [of_stdout writeString: @"\t"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\t"]; + [OFStdOut writeLine: OF_LOCALIZED( @"list_compression_method", @"Compression method: %[method]", @"method", compressionMethod)]; - [of_stdout writeString: @"\t"]; - [of_stdout writeLine: OF_LOCALIZED(@"list_crc32", + [OFStdOut writeString: @"\t"]; + [OFStdOut writeLine: OF_LOCALIZED(@"list_crc32", @"CRC32: %[crc32]", @"crc32", CRC32)]; - [of_stdout writeString: @"\t"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\t"]; + [OFStdOut writeLine: OF_LOCALIZED( @"list_modification_date", @"Modification date: %[date]", @"date", modificationDate)]; if (app->_outputLevel >= 2) { uint16_t versionMadeBy = entry.versionMadeBy; + OFZIPArchiveEntryAttributeCompatibility UNIX = + OFZIPArchiveEntryAttributeCompatibilityUNIX; - [of_stdout writeString: @"\t"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\t"]; + [OFStdOut writeLine: OF_LOCALIZED( @"list_version_made_by", @"Version made by: %[version]", @"version", - of_zip_archive_entry_version_to_string( + OFZIPArchiveEntryVersionToString( versionMadeBy))]; - [of_stdout writeString: @"\t"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\t"]; + [OFStdOut writeLine: OF_LOCALIZED( @"list_min_version_needed", @"Minimum version needed: %[version]", @"version", - of_zip_archive_entry_version_to_string( + OFZIPArchiveEntryVersionToString( entry.minVersionNeeded))]; - if ((versionMadeBy >> 8) == - OF_ZIP_ARCHIVE_ENTRY_ATTR_COMPAT_UNIX) { + if ((versionMadeBy >> 8) == UNIX) { uint32_t mode = entry .versionSpecificAttributes >> 16; OFString *modeString = [OFString stringWithFormat: @"%06o", mode]; - [of_stdout writeString: @"\t"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\t"]; + [OFStdOut writeLine: OF_LOCALIZED( @"list_mode", @"Mode: %[mode]", @"mode", modeString)]; } } @@ -205,29 +204,29 @@ if (app->_outputLevel >= 3) { OFString *GPBF = [OFString stringWithFormat: @"%04" PRIx16, entry.generalPurposeBitFlag]; - [of_stdout writeString: @"\t"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\t"]; + [OFStdOut writeLine: OF_LOCALIZED( @"list_general_purpose_bit_flag", @"General purpose bit flag: %[gpbf]", @"gpbf", GPBF)]; if (entry.extraField != nil) { - [of_stdout writeString: @"\t"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\t"]; + [OFStdOut writeLine: OF_LOCALIZED( @"list_extra_field", @"Extra field: %[extra]", @"extra", entry.extraField.description)]; } } if (entry.fileComment.length > 0) { - [of_stdout writeString: @"\t"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\t"]; + [OFStdOut writeLine: OF_LOCALIZED( @"list_comment", @"Comment: %[comment]", @"comment", entry.fileComment)]; } } @@ -257,21 +256,21 @@ [missing removeObject: fileName]; outFileName = [app safeLocalPathForPath: fileName]; if (outFileName == nil) { - [of_stderr writeLine: OF_LOCALIZED( + [OFStdErr writeLine: OF_LOCALIZED( @"refusing_to_extract_file", @"Refusing to extract %[file]!", @"file", fileName)]; app->_exitStatus = 1; goto outer_loop_end; } if (app->_outputLevel >= 0) - [of_stdout writeString: OF_LOCALIZED(@"extracting_file", + [OFStdOut writeString: OF_LOCALIZED(@"extracting_file", @"Extracting %[file]...", @"file", fileName)]; if ([fileName hasSuffix: @"/"]) { [fileManager createDirectoryAtPath: outFileName @@ -278,12 +277,12 @@ createParents: true]; setPermissions(outFileName, entry); setModificationDate(outFileName, entry); if (app->_outputLevel >= 0) { - [of_stdout writeString: @"\r"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\r"]; + [OFStdOut writeLine: OF_LOCALIZED( @"extracting_file_done", @"Extracting %[file]... done", @"file", fileName)]; } @@ -293,17 +292,15 @@ directory = outFileName.stringByDeletingLastPathComponent; if (![fileManager directoryExistsAtPath: directory]) [fileManager createDirectoryAtPath: directory createParents: true]; - if (![app shouldExtractFile: fileName - outFileName: outFileName]) + if (![app shouldExtractFile: fileName outFileName: outFileName]) goto outer_loop_end; stream = [_archive streamForReadingFile: fileName]; - output = [OFFile fileWithPath: outFileName - mode: @"w"]; + output = [OFFile fileWithPath: outFileName mode: @"w"]; setPermissions(outFileName, entry); while (!stream.atEndOfStream) { ssize_t length = [app copyBlockFromStream: stream toStream: output @@ -323,12 +320,12 @@ percent = newPercent; percentString = [OFString stringWithFormat: @"%3u", percent]; - [of_stdout writeString: @"\r"]; - [of_stdout writeString: OF_LOCALIZED( + [OFStdOut writeString: @"\r"]; + [OFStdOut writeString: OF_LOCALIZED( @"extracting_file_percent", @"Extracting %[file]... %[percent]%", @"file", fileName, @"percent", percentString)]; } @@ -336,12 +333,12 @@ [output close]; setModificationDate(outFileName, entry); if (app->_outputLevel >= 0) { - [of_stdout writeString: @"\r"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\r"]; + [OFStdOut writeLine: OF_LOCALIZED( @"extracting_file_done", @"Extracting %[file]... done", @"file", fileName)]; } @@ -349,11 +346,11 @@ objc_autoreleasePoolPop(pool); } if (missing.count > 0) { for (OFString *file in missing) - [of_stderr writeLine: OF_LOCALIZED( + [OFStdErr writeLine: OF_LOCALIZED( @"file_not_in_archive", @"File %[file] is not in the archive!", @"file", file)]; app->_exitStatus = 1; @@ -363,11 +360,11 @@ - (void)printFiles: (OFArray OF_GENERIC(OFString *) *)files { OFStream *stream; if (files.count < 1) { - [of_stderr writeLine: OF_LOCALIZED(@"print_no_file_specified", + [OFStdErr writeLine: OF_LOCALIZED(@"print_no_file_specified", @"Need one or more files to print!")]; app->_exitStatus = 1; return; } @@ -374,11 +371,11 @@ for (OFString *path in files) { @try { stream = [_archive streamForReadingFile: path]; } @catch (OFOpenItemFailedException *e) { if (e.errNo == ENOENT) { - [of_stderr writeLine: OF_LOCALIZED( + [OFStdErr writeLine: OF_LOCALIZED( @"file_not_in_archive", @"File %[file] is not in the archive!", @"file", e.path)]; app->_exitStatus = 1; continue; @@ -387,11 +384,11 @@ @throw e; } while (!stream.atEndOfStream) { ssize_t length = [app copyBlockFromStream: stream - toStream: of_stdout + toStream: OFStdOut fileName: path]; if (length < 0) { app->_exitStatus = 1; return; @@ -405,21 +402,21 @@ - (void)addFiles: (OFArray OF_GENERIC(OFString *) *)files { OFFileManager *fileManager = [OFFileManager defaultManager]; if (files.count < 1) { - [of_stderr writeLine: OF_LOCALIZED(@"add_no_file_specified", + [OFStdErr writeLine: OF_LOCALIZED(@"add_no_file_specified", @"Need one or more files to add!")]; app->_exitStatus = 1; return; } for (OFString *localFileName in files) { void *pool = objc_autoreleasePoolPush(); OFArray OF_GENERIC (OFString *) *components; OFString *fileName; - of_file_attributes_t attributes; + OFFileAttributes attributes; bool isDirectory = false; OFMutableZIPArchiveEntry *entry; unsigned long long size; OFStream *output; @@ -427,17 +424,17 @@ fileName = [components componentsJoinedByString: @"/"]; attributes = [fileManager attributesOfItemAtPath: localFileName]; - if ([attributes.fileType isEqual: of_file_type_directory]) { + if ([attributes.fileType isEqual: OFFileTypeDirectory]) { isDirectory = true; fileName = [fileName stringByAppendingString: @"/"]; } if (app->_outputLevel >= 0) - [of_stdout writeString: OF_LOCALIZED(@"adding_file", + [OFStdOut writeString: OF_LOCALIZED(@"adding_file", @"Adding %[file]...", @"file", fileName)]; entry = [OFMutableZIPArchiveEntry entryWithFileName: fileName]; @@ -447,11 +444,11 @@ entry.compressedSize = (int64_t)size; entry.uncompressedSize = (int64_t)size; entry.compressionMethod = - OF_ZIP_ARCHIVE_ENTRY_COMPRESSION_METHOD_NONE; + OFZIPArchiveEntryCompressionMethodNone; entry.modificationDate = attributes.fileModificationDate; [entry makeImmutable]; output = [_archive streamForWritingEntry: entry]; @@ -484,23 +481,23 @@ percent = newPercent; percentString = [OFString stringWithFormat: @"%3u", percent]; - [of_stdout writeString: @"\r"]; - [of_stdout writeString: OF_LOCALIZED( + [OFStdOut writeString: @"\r"]; + [OFStdOut writeString: OF_LOCALIZED( @"adding_file_percent", @"Adding %[file]... %[percent]%", @"file", fileName, @"percent", percentString)]; } } } if (app->_outputLevel >= 0) { - [of_stdout writeString: @"\r"]; - [of_stdout writeLine: OF_LOCALIZED( + [OFStdOut writeString: @"\r"]; + [OFStdOut writeLine: OF_LOCALIZED( @"adding_file_done", @"Adding %[file]... done", @"file", fileName)]; }