︙ | | | ︙ | |
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#ifndef _WIN32
# include <signal.h>
#endif
#import "OFStream.h"
#import "OFString.h"
#import "OFDataArray.h"
#import "OFRunLoop.h"
#import "OFInvalidArgumentException.h"
#import "OFInvalidFormatException.h"
#import "OFSetOptionFailedException.h"
#import "macros.h"
|
>
|
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#ifndef _WIN32
# include <signal.h>
#endif
#import "OFStream.h"
#import "OFString.h"
#import "OFDataArray.h"
#import "OFSystemInfo.h"
#import "OFRunLoop.h"
#import "OFInvalidArgumentException.h"
#import "OFInvalidFormatException.h"
#import "OFSetOptionFailedException.h"
#import "macros.h"
|
︙ | | | ︙ | |
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
|
return dataArray;
}
- (OFDataArray*)readDataArrayTillEndOfStream
{
OFDataArray *dataArray;
char *buffer;
dataArray = [OFDataArray dataArray];
buffer = [self allocMemoryWithSize: of_pagesize];
@try {
while (![self isAtEndOfStream]) {
size_t length;
length = [self readIntoBuffer: buffer
length: of_pagesize];
[dataArray addItems: buffer
count: length];
}
} @finally {
[self freeMemory: buffer];
}
|
>
>
|
|
|
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
|
return dataArray;
}
- (OFDataArray*)readDataArrayTillEndOfStream
{
OFDataArray *dataArray;
size_t pageSize;
char *buffer;
dataArray = [OFDataArray dataArray];
pageSize = [OFSystemInfo pageSize];
buffer = [self allocMemoryWithSize: pageSize];
@try {
while (![self isAtEndOfStream]) {
size_t length;
length = [self readIntoBuffer: buffer
length: pageSize];
[dataArray addItems: buffer
count: length];
}
} @finally {
[self freeMemory: buffer];
}
|
︙ | | | ︙ | |
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
|
}
return ret;
}
- (OFString*)tryReadLineWithEncoding: (of_string_encoding_t)encoding
{
size_t i, bufferLength, retLength;
char *retCString, *buffer, *newCache;
OFString *ret;
/* Look if there's a line or \0 in our cache */
if (!waitingForDelimiter && cache != NULL) {
for (i = 0; i < cacheLength; i++) {
if OF_UNLIKELY (cache[i] == '\n' || cache[i] == '\0') {
|
|
|
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
|
}
return ret;
}
- (OFString*)tryReadLineWithEncoding: (of_string_encoding_t)encoding
{
size_t i, pageSize, bufferLength, retLength;
char *retCString, *buffer, *newCache;
OFString *ret;
/* Look if there's a line or \0 in our cache */
if (!waitingForDelimiter && cache != NULL) {
for (i = 0; i < cacheLength; i++) {
if OF_UNLIKELY (cache[i] == '\n' || cache[i] == '\0') {
|
︙ | | | ︙ | |
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
|
waitingForDelimiter = NO;
return ret;
}
}
}
/* Read and see if we get a newline or \0 */
buffer = [self allocMemoryWithSize: of_pagesize];
@try {
if ([self lowlevelIsAtEndOfStream]) {
if (cache == NULL) {
waitingForDelimiter = NO;
return nil;
}
|
|
>
|
|
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
|
waitingForDelimiter = NO;
return ret;
}
}
}
/* Read and see if we got a newline or \0 */
pageSize = [OFSystemInfo pageSize];
buffer = [self allocMemoryWithSize: pageSize];
@try {
if ([self lowlevelIsAtEndOfStream]) {
if (cache == NULL) {
waitingForDelimiter = NO;
return nil;
}
|
︙ | | | ︙ | |
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
|
cacheLength = 0;
waitingForDelimiter = NO;
return ret;
}
bufferLength = [self lowlevelReadIntoBuffer: buffer
length: of_pagesize];
/* Look if there's a newline or \0 */
for (i = 0; i < bufferLength; i++) {
if OF_UNLIKELY (buffer[i] == '\n' ||
buffer[i] == '\0') {
retLength = cacheLength + i;
retCString = [self
|
|
|
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
|
cacheLength = 0;
waitingForDelimiter = NO;
return ret;
}
bufferLength = [self lowlevelReadIntoBuffer: buffer
length: pageSize];
/* Look if there's a newline or \0 */
for (i = 0; i < bufferLength; i++) {
if OF_UNLIKELY (buffer[i] == '\n' ||
buffer[i] == '\0') {
retLength = cacheLength + i;
retCString = [self
|
︙ | | | ︙ | |
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
|
return [self tryReadLineWithEncoding: OF_STRING_ENCODING_UTF_8];
}
- (OFString*)tryReadTillDelimiter: (OFString*)delimiter
encoding: (of_string_encoding_t)encoding
{
const char *delimiterCString;
size_t i, j, delimiterLength, bufferLength, retLength;
char *retCString, *buffer, *newCache;
OFString *ret;
delimiterCString = [delimiter cStringUsingEncoding: encoding];
delimiterLength = [delimiter lengthOfBytesUsingEncoding: encoding];
j = 0;
|
|
|
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
|
return [self tryReadLineWithEncoding: OF_STRING_ENCODING_UTF_8];
}
- (OFString*)tryReadTillDelimiter: (OFString*)delimiter
encoding: (of_string_encoding_t)encoding
{
const char *delimiterCString;
size_t i, j, delimiterLength, pageSize, bufferLength, retLength;
char *retCString, *buffer, *newCache;
OFString *ret;
delimiterCString = [delimiter cStringUsingEncoding: encoding];
delimiterLength = [delimiter lengthOfBytesUsingEncoding: encoding];
j = 0;
|
︙ | | | ︙ | |
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
|
waitingForDelimiter = NO;
return ret;
}
}
}
/* Read and see if we get a delimiter or \0 */
buffer = [self allocMemoryWithSize: of_pagesize];
@try {
if ([self lowlevelIsAtEndOfStream]) {
if (cache == NULL) {
waitingForDelimiter = NO;
return nil;
}
|
|
>
|
|
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
|
waitingForDelimiter = NO;
return ret;
}
}
}
/* Read and see if we got a delimiter or \0 */
pageSize = [OFSystemInfo pageSize];
buffer = [self allocMemoryWithSize: pageSize];
@try {
if ([self lowlevelIsAtEndOfStream]) {
if (cache == NULL) {
waitingForDelimiter = NO;
return nil;
}
|
︙ | | | ︙ | |
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
|
cacheLength = 0;
waitingForDelimiter = NO;
return ret;
}
bufferLength = [self lowlevelReadIntoBuffer: buffer
length: of_pagesize];
/* Look if there's a delimiter or \0 */
for (i = 0; i < bufferLength; i++) {
if (buffer[i] != delimiterCString[j++])
j = 0;
if (j == delimiterLength || buffer[i] == '\0') {
|
|
|
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
|
cacheLength = 0;
waitingForDelimiter = NO;
return ret;
}
bufferLength = [self lowlevelReadIntoBuffer: buffer
length: pageSize];
/* Look if there's a delimiter or \0 */
for (i = 0; i < bufferLength; i++) {
if (buffer[i] != delimiterCString[j++])
j = 0;
if (j == delimiterLength || buffer[i] == '\0') {
|
︙ | | | ︙ | |