Differences From Artifact [e1f5b7ea93]:
- File
src/OFZIPArchive.m
— part of check-in
[13ee56edf3]
at
2014-06-21 21:43:43
on branch trunk
— Move all macros from OFObject.h to macros.h
This means that OFObject.h imports macros.h now, making it unnecessary
to manually import macros.h in almost every file. And while at it, also
import autorelease.h in OFObject.h, so that this doesn't need to be
manually imported in almost every file as well. (user: js, size: 13366) [annotate] [blame] [check-ins using]
To Artifact [21935bfcfb]:
- File
src/OFZIPArchive.m
— part of check-in
[46b89b1c8e]
at
2015-01-03 20:42:30
on branch trunk
— Introduce and use of_offset_t instead of off_t
The reason for this is that some systems, for example Android, use
32 bits for off_t while having size related fields like st_size as
long long. (user: js, size: 13442) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
74 75 76 77 78 79 80 | bool _hasDataDescriptor; uint64_t _size; uint32_t _CRC32; bool _atEndOfStream; } - initWithArchiveFile: (OFString*)path | | | 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | bool _hasDataDescriptor; uint64_t _size; uint32_t _CRC32; bool _atEndOfStream; } - initWithArchiveFile: (OFString*)path offset: (of_offset_t)offset localFileHeader: (OFZIPArchive_LocalFileHeader*)localFileHeader; @end uint32_t of_zip_archive_read_field32(uint8_t **data, uint16_t *size) { uint32_t field = 0; |
︙ | ︙ | |||
176 177 178 179 180 181 182 | [super dealloc]; } - (void)OF_readZIPInfo { void *pool = objc_autoreleasePoolPush(); uint16_t commentLength; | | | 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | [super dealloc]; } - (void)OF_readZIPInfo { void *pool = objc_autoreleasePoolPush(); uint16_t commentLength; of_offset_t offset = -22; bool valid = false; do { @try { [_file seekToOffset: offset whence: SEEK_END]; } @catch (OFSeekFailedException *e) { |
︙ | ︙ | |||
234 235 236 237 238 239 240 | /* * FIXME: Handle number of the disk containing ZIP64 end of * central directory record. */ [_file readLittleEndianInt32]; offset64 = [_file readLittleEndianInt64]; | | | | 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | /* * FIXME: Handle number of the disk containing ZIP64 end of * central directory record. */ [_file readLittleEndianInt32]; offset64 = [_file readLittleEndianInt64]; if ((of_offset_t)offset64 != offset64) @throw [OFOutOfRangeException exception]; [_file seekToOffset: (of_offset_t)offset64 whence: SEEK_SET]; if ([_file readLittleEndianInt32] != 0x06064B50) @throw [OFInvalidFormatException exception]; size = [_file readLittleEndianInt64]; if (size < 44) |
︙ | ︙ | |||
259 260 261 262 263 264 265 | _diskNumber = [_file readLittleEndianInt32]; _centralDirectoryDisk = [_file readLittleEndianInt32]; _centralDirectoryEntriesInDisk = [_file readLittleEndianInt64]; _centralDirectoryEntries = [_file readLittleEndianInt64]; _centralDirectorySize = [_file readLittleEndianInt64]; _centralDirectoryOffset = [_file readLittleEndianInt64]; | > | | | | 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 | _diskNumber = [_file readLittleEndianInt32]; _centralDirectoryDisk = [_file readLittleEndianInt32]; _centralDirectoryEntriesInDisk = [_file readLittleEndianInt64]; _centralDirectoryEntries = [_file readLittleEndianInt64]; _centralDirectorySize = [_file readLittleEndianInt64]; _centralDirectoryOffset = [_file readLittleEndianInt64]; if ((of_offset_t)_centralDirectoryOffset != _centralDirectoryOffset) @throw [OFOutOfRangeException exception]; } objc_autoreleasePoolPop(pool); } - (void)OF_readEntries { void *pool = objc_autoreleasePoolPush(); size_t i; if ((of_offset_t)_centralDirectoryOffset != _centralDirectoryOffset) @throw [OFOutOfRangeException exception]; [_file seekToOffset: (of_offset_t)_centralDirectoryOffset whence: SEEK_SET]; _entries = [[OFMutableArray alloc] init]; _pathToEntryMap = [[OFMutableDictionary alloc] init]; for (i = 0; i < _centralDirectoryEntries; i++) { OFZIPArchiveEntry *entry = [[[OFZIPArchiveEntry alloc] |
︙ | ︙ | |||
314 315 316 317 318 319 320 | - (OFStream*)streamForReadingFile: (OFString*)path { OFStream *ret; void *pool = objc_autoreleasePoolPush(); OFZIPArchiveEntry *entry = [_pathToEntryMap objectForKey: path]; OFZIPArchive_LocalFileHeader *localFileHeader; | | | | | | 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 | - (OFStream*)streamForReadingFile: (OFString*)path { OFStream *ret; void *pool = objc_autoreleasePoolPush(); OFZIPArchiveEntry *entry = [_pathToEntryMap objectForKey: path]; OFZIPArchive_LocalFileHeader *localFileHeader; uint64_t offset64; if (entry == nil) { errno = ENOENT; @throw [OFOpenFileFailedException exceptionWithPath: path mode: @"rb"]; } offset64 = [entry OF_localFileHeaderOffset]; if ((of_offset_t)offset64 != offset64) @throw [OFOutOfRangeException exception]; [_file seekToOffset: (of_offset_t)offset64 whence: SEEK_SET]; localFileHeader = [[[OFZIPArchive_LocalFileHeader alloc] initWithFile: _file] autorelease]; if (![localFileHeader matchesEntry: entry]) @throw [OFInvalidFormatException exception]; |
︙ | ︙ | |||
442 443 444 445 446 447 448 | return true; } @end @implementation OFZIPArchive_FileStream - initWithArchiveFile: (OFString*)path | | | 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 | return true; } @end @implementation OFZIPArchive_FileStream - initWithArchiveFile: (OFString*)path offset: (of_offset_t)offset localFileHeader: (OFZIPArchive_LocalFileHeader*)localFileHeader { self = [super init]; @try { _file = [[OFFile alloc] initWithPath: path mode: @"rb"]; |
︙ | ︙ |