- stream->bufidx -= written;\r
- memmove( stream->buffer, stream->buffer + written, stream->bufidx );\r
- return EOF;\r
+ rv = EOF;\r
+ break;\r
+ }\r
+ }\r
+\r
+ stream->bufidx -= written;\r
+ memmove( stream->buffer, stream->buffer + written, stream->bufidx );\r
+\r
+ return rv;\r
+}\r
+\r
+#if defined(_PDCLIB_NEED_EOL_TRANSLATION)\r
+#undef _PDCLIB_NEED_EOL_TRANSLATION\r
+#define _PDCLIB_NEED_EOL_TRANSLATION 1\r
+#else\r
+#define _PDCLIB_NEED_EOL_TRANSLATION 0\r
+#endif\r
+\r
+int _PDCLIB_flushbuffer( FILE * stream )\r
+{\r
+ // if a text stream, and this platform needs EOL translation, well...\r
+ if ( ! ( stream->status & _PDCLIB_FBIN ) && _PDCLIB_NEED_EOL_TRANSLATION )\r
+ {\r
+ size_t pos;\r
+ for ( pos = 0; pos < stream->bufidx; pos++ )\r
+ {\r
+ if (stream->buffer[pos] == '\n' ) {\r
+ if ( stream->bufidx == stream->bufend ) {\r
+ // buffer is full. Need to print out everything up till now\r
+ if( flushsubbuffer( stream, pos ) )\r
+ {\r
+ return EOF;\r
+ }\r
+\r
+ pos = 0;\r
+ }\r
+\r
+ // we have spare space in buffer. Shift everything 1char and\r
+ // insert \r\r
+ memmove( &stream->buffer[pos+1], &stream->buffer[pos], stream->bufidx - pos );\r
+ stream->buffer[pos] = '\r';\r
+\r
+ pos += 2;\r
+ stream->bufidx++;\r
+ }\r