Index: src/stream.c ================================================================== --- src/stream.c +++ src/stream.c @@ -246,10 +246,34 @@ bool cfw_stream_write_string(void *ptr, const char *str) { return cfw_stream_write(ptr, str, strlen(str)); } + +bool +cfw_stream_write_line(void *ptr, const char *str) +{ + char *tmp; + size_t len; + + len = strlen(str); + + if ((tmp = malloc(len + 2)) == NULL) + return false; + + memcpy(tmp, str, len); + tmp[len] = '\n'; + tmp[len + 1] = '\0'; + + if (!cfw_stream_write(ptr, tmp, len + 1)) { + free(tmp); + return false; + } + + free(tmp); + return true; +} bool cfw_stream_eof(void *ptr) { CFWStream *stream = ptr; Index: src/stream.h ================================================================== --- src/stream.h +++ src/stream.h @@ -50,8 +50,9 @@ extern CFWClass *cfw_stream; extern ssize_t cfw_stream_read(void*, void*, size_t); extern CFWString* cfw_stream_read_line(void*); extern bool cfw_stream_write(void*, const void*, size_t); extern bool cfw_stream_write_string(void*, const char*); +extern bool cfw_stream_write_line(void*, const char*); extern bool cfw_stream_eof(void*); extern void cfw_stream_close(void*); #endif