67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
@interface OFLHAArchiveFileWriteStream: OFStream <OFReadyForWritingObserving>
{
OFLHAArchive *_archive;
OFMutableLHAArchiveEntry *_entry;
OFStringEncoding _encoding;
OFSeekableStream *_stream;
OFStreamOffset _headerOffset;
uint32_t _bytesWritten;
uint16_t _CRC16;
}
- (instancetype)of_initWithArchive: (OFLHAArchive *)archive
stream: (OFSeekableStream *)stream
entry: (OFLHAArchiveEntry *)entry
encoding: (OFStringEncoding)encoding;
|
|
|
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
@interface OFLHAArchiveFileWriteStream: OFStream <OFReadyForWritingObserving>
{
OFLHAArchive *_archive;
OFMutableLHAArchiveEntry *_entry;
OFStringEncoding _encoding;
OFSeekableStream *_stream;
OFStreamOffset _headerOffset;
uint64_t _bytesWritten;
uint16_t _CRC16;
}
- (instancetype)of_initWithArchive: (OFLHAArchive *)archive
stream: (OFSeekableStream *)stream
entry: (OFLHAArchiveEntry *)entry
encoding: (OFStringEncoding)encoding;
|
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
|
}
- (size_t)lowlevelWriteBuffer: (const void *)buffer length: (size_t)length
{
if (_stream == nil)
@throw [OFNotOpenException exceptionWithObject: self];
if (UINT32_MAX - _bytesWritten < length)
@throw [OFOutOfRangeException exception];
@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
{
|
|
|
|
|
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
|
}
- (size_t)lowlevelWriteBuffer: (const void *)buffer length: (size_t)length
{
if (_stream == nil)
@throw [OFNotOpenException exceptionWithObject: self];
if (UINT64_MAX - _bytesWritten < length)
@throw [OFOutOfRangeException exception];
@try {
[_stream writeBuffer: buffer length: length];
} @catch (OFWriteFailedException *e) {
OFEnsure(e.bytesWritten <= length);
_bytesWritten += (uint64_t)e.bytesWritten;
_CRC16 = OFCRC16(_CRC16, buffer, e.bytesWritten);
if (e.errNo == EWOULDBLOCK || e.errNo == EAGAIN)
return e.bytesWritten;
@throw e;
}
_bytesWritten += (uint64_t)length;
_CRC16 = OFCRC16(_CRC16, buffer, length);
return length;
}
- (bool)lowlevelIsAtEndOfStream
{
|