Differences From Artifact [1028d48dc9]:
- File src/OFGZIPStream.m — part of check-in [469a496cd2] at 2017-05-08 21:37:11 on branch trunk — Add OF_DESIGNATED_INITIALIZER & OF_METHOD_FAMILY (user: js, size: 5865) [annotate] [blame] [check-ins using]
To Artifact [4efebeb9c7]:
- File
src/OFGZIPStream.m
— part of check-in
[f9cd4f9cab]
at
2017-06-05 15:51:48
on branch trunk
— OFStream: Don't throw when at end of stream
Instead, let reads return 0 and let writes append after the end. (user: js, size: 6361) [annotate] [blame] [check-ins using]
| ︙ | ︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#import "OFDeflateStream.h"
#import "OFDate.h"
#import "crc32.h"
#import "OFChecksumFailedException.h"
#import "OFInvalidFormatException.h"
@implementation OFGZIPStream
+ (instancetype)streamWithStream: (OFStream *)stream
{
return [[[self alloc] initWithStream: stream] autorelease];
}
| > > | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#import "OFDeflateStream.h"
#import "OFDate.h"
#import "crc32.h"
#import "OFChecksumFailedException.h"
#import "OFInvalidFormatException.h"
#import "OFNotOpenException.h"
#import "OFTruncatedDataException.h"
@implementation OFGZIPStream
+ (instancetype)streamWithStream: (OFStream *)stream
{
return [[[self alloc] initWithStream: stream] autorelease];
}
|
| ︙ | ︙ | |||
49 50 51 52 53 54 55 |
}
return self;
}
- (void)dealloc
{
| > | > > > > | > > > | > > > | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
}
return self;
}
- (void)dealloc
{
[self close];
[_inflateStream release];
[_modificationDate release];
[super dealloc];
}
- (size_t)lowlevelReadIntoBuffer: (void *)buffer
length: (size_t)length
{
if (_stream == nil)
@throw [OFNotOpenException exceptionWithObject: self];
for (;;) {
uint8_t byte;
if ([_stream isAtEndOfStream]) {
if (_state != OF_GZIP_STREAM_ID1)
@throw [OFTruncatedDataException exception];
return 0;
}
switch (_state) {
case OF_GZIP_STREAM_ID1:
case OF_GZIP_STREAM_ID2:
case OF_GZIP_STREAM_COMPRESSION_METHOD:
if ([_stream readIntoBuffer: &byte
length: 1] < 1)
return 0;
|
| ︙ | ︙ | |||
93 94 95 96 97 98 99 100 101 102 103 104 105 106 | case OF_GZIP_STREAM_MODIFICATION_TIME: _bytesRead += [_stream readIntoBuffer: _buffer + _bytesRead length: 4 - _bytesRead]; if (_bytesRead < 4) return 0; _modificationDate = [[OFDate alloc] initWithTimeIntervalSince1970: (_buffer[3] << 24) | (_buffer[2] << 16) | (_buffer[1] << 8) | _buffer[0]]; _bytesRead = 0; | > > > | 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | case OF_GZIP_STREAM_MODIFICATION_TIME: _bytesRead += [_stream readIntoBuffer: _buffer + _bytesRead length: 4 - _bytesRead]; if (_bytesRead < 4) return 0; [_modificationDate release]; _modificationDate = nil; _modificationDate = [[OFDate alloc] initWithTimeIntervalSince1970: (_buffer[3] << 24) | (_buffer[2] << 16) | (_buffer[1] << 8) | _buffer[0]]; _bytesRead = 0; |
| ︙ | ︙ | |||
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 |
break;
}
}
}
- (bool)lowlevelIsAtEndOfStream
{
return [_stream isAtEndOfStream];
}
- (bool)hasDataInReadBuffer
{
if (_state == OF_GZIP_STREAM_DATA)
return ([super hasDataInReadBuffer] ||
[_inflateStream hasDataInReadBuffer]);
return ([super hasDataInReadBuffer] || [_stream hasDataInReadBuffer]);
}
@end
| > > > > > > > > > > > | 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 |
break;
}
}
}
- (bool)lowlevelIsAtEndOfStream
{
if (_stream == nil)
@throw [OFNotOpenException exceptionWithObject: self];
return [_stream isAtEndOfStream];
}
- (bool)hasDataInReadBuffer
{
if (_state == OF_GZIP_STREAM_DATA)
return ([super hasDataInReadBuffer] ||
[_inflateStream hasDataInReadBuffer]);
return ([super hasDataInReadBuffer] || [_stream hasDataInReadBuffer]);
}
- (void)close
{
[_stream release];
_stream = nil;
[super close];
}
@end
|