︙ | | | ︙ | |
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
+ (instancetype)archiveWithIRI: (OFIRI *)IRI mode: (OFString *)mode
{
return [[[self alloc] initWithIRI: IRI mode: mode] autorelease];
}
+ (OFIRI *)IRIForFilePath: (OFString *)path inArchiveWithIRI: (OFIRI *)IRI
{
return OFArchiveIRIHandlerIRIForFileInArchive(@"zoo", path, IRI);
}
- (instancetype)init
{
OF_INVALID_INIT_METHOD
}
|
|
|
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
+ (instancetype)archiveWithIRI: (OFIRI *)IRI mode: (OFString *)mode
{
return [[[self alloc] initWithIRI: IRI mode: mode] autorelease];
}
+ (OFIRI *)IRIForFilePath: (OFString *)path inArchiveWithIRI: (OFIRI *)IRI
{
return _OFArchiveIRIHandlerIRIForFileInArchive(@"zoo", path, IRI);
}
- (instancetype)init
{
OF_INVALID_INIT_METHOD
}
|
︙ | | | ︙ | |
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
|
[_stream readIntoBuffer: buffer exactLength: _lastHeaderLength];
tmp32 = OFToLittleEndian32((uint32_t)offset);
memcpy(buffer + 6, &tmp32, 4);
tmp16 = OFToLittleEndian16(
OFCRC16(0, buffer, _lastHeaderLength));
memcpy(buffer + 54, &tmp16, 2);
[_stream seekToOffset: _lastHeaderOffset whence: OFSeekSet];
[_stream writeBuffer: buffer length: _lastHeaderLength];
[_stream seekToOffset: offset whence: OFSeekSet];
} @finally {
|
|
|
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
|
[_stream readIntoBuffer: buffer exactLength: _lastHeaderLength];
tmp32 = OFToLittleEndian32((uint32_t)offset);
memcpy(buffer + 6, &tmp32, 4);
tmp16 = OFToLittleEndian16(
_OFCRC16(0, buffer, _lastHeaderLength));
memcpy(buffer + 54, &tmp16, 2);
[_stream seekToOffset: _lastHeaderOffset whence: OFSeekSet];
[_stream writeBuffer: buffer length: _lastHeaderLength];
[_stream seekToOffset: offset whence: OFSeekSet];
} @finally {
|
︙ | | | ︙ | |
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
|
if (length > _toRead)
length = (size_t)_toRead;
ret = [_decompressedStream readIntoBuffer: buffer length: length];
_toRead -= ret;
_CRC16 = OFCRC16(_CRC16, buffer, ret);
if (_toRead == 0) {
_atEndOfStream = true;
if (_CRC16 != _entry.CRC16) {
OFString *actualChecksum = [OFString stringWithFormat:
@"%04" @PRIX16, _CRC16];
|
|
|
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
|
if (length > _toRead)
length = (size_t)_toRead;
ret = [_decompressedStream readIntoBuffer: buffer length: length];
_toRead -= ret;
_CRC16 = _OFCRC16(_CRC16, buffer, ret);
if (_toRead == 0) {
_atEndOfStream = true;
if (_CRC16 != _entry.CRC16) {
OFString *actualChecksum = [OFString stringWithFormat:
@"%04" @PRIX16, _CRC16];
|
︙ | | | ︙ | |
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
|
@try {
[_stream writeBuffer: buffer length: length];
} @catch (OFWriteFailedException *e) {
OFEnsure(e.bytesWritten <= length);
_bytesWritten += (uint32_t)e.bytesWritten;
_CRC16 = OFCRC16(_CRC16, buffer, e.bytesWritten);
if (e.errNo == EWOULDBLOCK || e.errNo == EAGAIN)
return e.bytesWritten;
@throw e;
}
_bytesWritten += (uint32_t)length;
_CRC16 = OFCRC16(_CRC16, buffer, length);
return length;
}
- (bool)lowlevelIsAtEndOfStream
{
if (_stream == nil)
|
|
|
|
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
|
@try {
[_stream writeBuffer: buffer length: length];
} @catch (OFWriteFailedException *e) {
OFEnsure(e.bytesWritten <= length);
_bytesWritten += (uint32_t)e.bytesWritten;
_CRC16 = _OFCRC16(_CRC16, buffer, e.bytesWritten);
if (e.errNo == EWOULDBLOCK || e.errNo == EAGAIN)
return e.bytesWritten;
@throw e;
}
_bytesWritten += (uint32_t)length;
_CRC16 = _OFCRC16(_CRC16, buffer, length);
return length;
}
- (bool)lowlevelIsAtEndOfStream
{
if (_stream == nil)
|
︙ | | | ︙ | |