@@ -22,10 +22,14 @@ #include #include #include #include + +#ifndef _WIN32 +# include +#endif #import "OFStream.h" #import "OFString.h" #import "OFDataArray.h" #import "OFExceptions.h" @@ -32,10 +36,18 @@ #import "macros.h" #import "asprintf.h" @implementation OFStream +#ifndef _WIN32 ++ (void)initialize +{ + if (self == [OFStream class]) + signal(SIGPIPE, SIG_IGN); +} +#endif + - init { if (isa == [OFStream class]) { Class c = isa; [self release]; @@ -240,11 +252,11 @@ - (OFString*)readLine { return [self readLineWithEncoding: OF_STRING_ENCODING_UTF_8]; } -- (OFString*)readLineWithEncoding: (enum of_string_encoding)encoding +- (OFString*)readLineWithEncoding: (of_string_encoding_t)encoding { size_t i, len, ret_len; char *ret_c, *tmp, *tmp2; OFString *ret; @@ -388,11 +400,11 @@ return [self readTillDelimiter: delimiter withEncoding: OF_STRING_ENCODING_UTF_8]; } - (OFString*)readTillDelimiter: (OFString*)delimiter - withEncoding: (enum of_string_encoding)encoding + withEncoding: (of_string_encoding_t)encoding { const char *delim; size_t i, j, delim_len, len, ret_len; char *ret_c, *tmp, *tmp2; OFString *ret; @@ -630,14 +642,24 @@ fromBuffer: [str cString]]; } - (size_t)writeLine: (OFString*)str { - size_t ret = [self writeString: str]; - [self writeInt8: '\n']; + size_t len = [str cStringLength]; + char *buf; + + buf = [self allocMemoryWithSize: len + 1]; + + @try { + memcpy(buf, [str cString], len); + buf[len] = '\n'; - return ret + 1; + return [self writeNBytes: len + 1 + fromBuffer: buf]; + } @finally { + [self freeMemory: buf]; + } } - (size_t)writeFormat: (OFString*)fmt, ... { va_list args;