35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#import "OFWriteFailedException.h"
@interface OFTarArchive_FileReadStream: OFStream <OFReadyForReadingObserving>
{
OFTarArchiveEntry *_entry;
OF_KINDOF(OFStream *) _stream;
uint64_t _toRead;
bool _atEndOfStream;
}
- (instancetype)of_initWithStream: (OFStream *)stream
entry: (OFTarArchiveEntry *)entry;
- (void)of_skip;
@end
|
|
|
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#import "OFWriteFailedException.h"
@interface OFTarArchive_FileReadStream: OFStream <OFReadyForReadingObserving>
{
OFTarArchiveEntry *_entry;
OF_KINDOF(OFStream *) _stream;
uint64_t _toRead;
bool _atEndOfStream, _skipped;
}
- (instancetype)of_initWithStream: (OFStream *)stream
entry: (OFTarArchiveEntry *)entry;
- (void)of_skip;
@end
|
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
|
_stream = nil;
[super close];
}
- (void)of_skip
{
if (_stream == nil || _toRead == 0)
return;
if ([_stream isKindOfClass: [OFSeekableStream class]] &&
_toRead <= INT64_MAX && (of_offset_t)_toRead == (int64_t)_toRead) {
uint64_t size;
[_stream seekToOffset: (of_offset_t)_toRead
|
|
|
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
|
_stream = nil;
[super close];
}
- (void)of_skip
{
if (_stream == nil || _skipped)
return;
if ([_stream isKindOfClass: [OFSeekableStream class]] &&
_toRead <= INT64_MAX && (of_offset_t)_toRead == (int64_t)_toRead) {
uint64_t size;
[_stream seekToOffset: (of_offset_t)_toRead
|
396
397
398
399
400
401
402
403
404
405
406
407
408
409
|
size = [_entry size];
if (size % 512 != 0)
[_stream readIntoBuffer: buffer
exactLength: (size_t)(512 - (size % 512))];
}
}
@end
@implementation OFTarArchive_FileWriteStream
- (instancetype)of_initWithStream: (OF_KINDOF(OFStream *))stream
entry: (OFTarArchiveEntry *)entry
{
|
>
>
|
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
|
size = [_entry size];
if (size % 512 != 0)
[_stream readIntoBuffer: buffer
exactLength: (size_t)(512 - (size % 512))];
}
_skipped = true;
}
@end
@implementation OFTarArchive_FileWriteStream
- (instancetype)of_initWithStream: (OF_KINDOF(OFStream *))stream
entry: (OFTarArchiveEntry *)entry
{
|