diff --git a/ZipZap/ZZArchive.h b/ZipZap/ZZArchive.h index a37e0a7e..545dae0f 100644 --- a/ZipZap/ZZArchive.h +++ b/ZipZap/ZZArchive.h @@ -56,6 +56,7 @@ NS_ASSUME_NONNULL_BEGIN * The array of ZZArchiveEntry entries within this archive. */ @property (readonly, nonatomic) NSArray* entries; +@property (readonly, nonatomic) NSDictionary* entriesDictionary; /** * Creates a new archive with the zip file at the given file URL. diff --git a/ZipZap/ZZArchive.mm b/ZipZap/ZZArchive.mm index 3ed3dc10..79942671 100644 --- a/ZipZap/ZZArchive.mm +++ b/ZipZap/ZZArchive.mm @@ -141,6 +141,8 @@ - (BOOL)loadCanMiss:(BOOL)canMiss error:(out NSError**)error ZZCentralFileHeader* nextCentralFileHeader = (ZZCentralFileHeader*)(beginContent + endOfCentralDirectoryRecord->offsetOfStartOfCentralDirectoryWithRespectToTheStartingDiskNumber); NSMutableArray* entries = [NSMutableArray array]; + NSMutableDictionary *entriesDictionary = [NSMutableDictionary dictionary]; + for (NSUInteger index = 0; index < endOfCentralDirectoryRecord->totalNumberOfEntriesInTheCentralDirectory; ++index) { // sanity check: @@ -159,8 +161,12 @@ - (BOOL)loadCanMiss:(BOOL)canMiss error:(out NSError**)error ZZLocalFileHeader* nextLocalFileHeader = (ZZLocalFileHeader*)(beginContent + nextCentralFileHeader->relativeOffsetOfLocalHeader); - [entries addObject:[[ZZOldArchiveEntry alloc] initWithCentralFileHeader:nextCentralFileHeader - localFileHeader:nextLocalFileHeader]]; + ZZOldArchiveEntry *entry = [[ZZOldArchiveEntry alloc] initWithCentralFileHeader:nextCentralFileHeader + localFileHeader:nextLocalFileHeader]; + + [entries addObject:entry]; + [entriesDictionary setObject:entry forKey:entry.fileName]; + nextCentralFileHeader = nextCentralFileHeader->nextCentralFileHeader(); } @@ -168,6 +174,7 @@ - (BOOL)loadCanMiss:(BOOL)canMiss error:(out NSError**)error // having successfully negotiated the new contents + entries, replace in one go _contents = contents; _entries = entries; + _entriesDictionary = entriesDictionary; return YES; }