mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-08 08:31:13 +00:00
67 lines
1.7 KiB
Objective-C
67 lines
1.7 KiB
Objective-C
//
|
|
// NSData+NSInputStream.m
|
|
// Tidbits
|
|
//
|
|
// Created by Ewan Mellor on 6/16/13.
|
|
// Copyright (c) 2013 Tipbit, Inc. All rights reserved.
|
|
//
|
|
|
|
#import "NSData+NSInputStream.h"
|
|
|
|
|
|
#define BUFSIZE 65536U
|
|
|
|
|
|
@implementation NSData (NSInputStream)
|
|
|
|
|
|
+(NSData *)dataWithContentsOfStream:(NSInputStream *)input initialCapacity:(NSUInteger)capacity error:(NSError **)error {
|
|
if (!input) {
|
|
if (error) {
|
|
*error = [NSError errorWithDomain:NSPOSIXErrorDomain code:ENOENT userInfo:nil];
|
|
}
|
|
return nil;
|
|
}
|
|
size_t bufsize = MIN(BUFSIZE, capacity);
|
|
uint8_t * buf = malloc(bufsize);
|
|
if (buf == NULL) {
|
|
if (error) {
|
|
*error = [NSError errorWithDomain:NSPOSIXErrorDomain code:ENOMEM userInfo:nil];
|
|
}
|
|
return nil;
|
|
}
|
|
|
|
NSMutableData* result = capacity == NSUIntegerMax ? [NSMutableData data] : [NSMutableData dataWithCapacity:capacity];
|
|
@try {
|
|
while (true) {
|
|
NSInteger n = [input read:buf maxLength:bufsize];
|
|
if (n < 0) {
|
|
result = nil;
|
|
if (error) {
|
|
*error = [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo:nil];
|
|
}
|
|
break;
|
|
}
|
|
else if (n == 0) {
|
|
break;
|
|
}
|
|
else {
|
|
[result appendBytes:buf length:n];
|
|
}
|
|
}
|
|
}
|
|
@catch (NSException * exn) {
|
|
SVGKitLogWarn(@"[%@] WARNING: caught exception writing to file: %@", [self class], exn);
|
|
result = nil;
|
|
if (error) {
|
|
*error = [NSError errorWithDomain:NSPOSIXErrorDomain code:EIO userInfo:nil];
|
|
}
|
|
}
|
|
|
|
free(buf);
|
|
return result;
|
|
}
|
|
|
|
|
|
@end
|