ObjFW  Check-in [28ffd3d914]

Overview
Comment:OFStream: Fix a FIXME.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 28ffd3d91426d836372c8b068839a0168f938d768eff4ea10498b56621d68c59
User & Date: js on 2012-12-16 01:24:51
Other Links: manifest | tags
Context
2012-12-16
13:39
OFRunLoop: Use OFMutex instead of @synchronized. check-in: 35ad639b7c user: js tags: trunk
01:24
OFStream: Fix a FIXME. check-in: 28ffd3d914 user: js tags: trunk
01:18
Add -[OFStream write{String,Line}:usingEncoding:]. check-in: 8f6d44074d user: js tags: trunk
Changes

Modified src/OFStream.m from [9acea0cd8c] to [38e80261fb].

758
759
760
761
762
763
764
765

766
767
768
769
770
771
772


773
774
775
776
777
778
779
780
781
782
783

784
785
786
787
788
789
790
758
759
760
761
762
763
764

765
766
767
768
769



770
771
772
773
774
775
776
777
778
779
780
781

782
783
784
785
786
787
788
789







-
+




-
-
-
+
+










-
+







{
	return [self tryReadLineWithEncoding: OF_STRING_ENCODING_UTF_8];
}

- (OFString*)tryReadTillDelimiter: (OFString*)delimiter
			 encoding: (of_string_encoding_t)encoding
{
	const char *delimiterUTF8String;
	const char *delimiterCString;
	size_t i, j, delimiterLength, bufferLength, retLength;
	char *retCString, *buffer, *newCache;
	OFString *ret;

	/* FIXME: Convert delimiter to specified charset */
	delimiterUTF8String = [delimiter UTF8String];
	delimiterLength = [delimiter UTF8StringLength];
	delimiterCString = [delimiter cStringUsingEncoding: encoding];
	delimiterLength = [delimiter lengthOfBytesUsingEncoding: encoding];
	j = 0;

	if (delimiterLength == 0)
		@throw [OFInvalidArgumentException
		    exceptionWithClass: [self class]
			      selector: _cmd];

	/* Look if there's something in our cache */
	if (!waitingForDelimiter && cache != NULL) {
		for (i = 0; i < cacheLength; i++) {
			if (cache[i] != delimiterUTF8String[j++])
			if (cache[i] != delimiterCString[j++])
				j = 0;

			if (j == delimiterLength || cache[i] == '\0') {
				if (cache[i] == '\0')
					delimiterLength = 1;

				ret = [OFString
831
832
833
834
835
836
837
838

839
840
841
842
843
844
845
830
831
832
833
834
835
836

837
838
839
840
841
842
843
844







-
+







		}

		bufferLength = [self lowlevelReadIntoBuffer: buffer
						     length: of_pagesize];

		/* Look if there's a delimiter or \0 */
		for (i = 0; i < bufferLength; i++) {
			if (buffer[i] != delimiterUTF8String[j++])
			if (buffer[i] != delimiterCString[j++])
				j = 0;

			if (j == delimiterLength || buffer[i] == '\0') {
				if (buffer[i] == '\0')
					delimiterLength = 1;

				retLength = cacheLength + i + 1 -