+ case -1:
+ /* write error */
+ stream->status |= _PDCLIB_ERRORFLAG;
+ /* FIXME: Map host errno to PDCLib errno */
+ return 0;
+ case 0:
+ /* no characters written - retry */
+ if ( retries == _PDCLIB_FLUSH_RETRIES )
+ {
+ /* max. number of retries without characters being written */
+ stream->status |= _PDCLIB_ERRORFLAG;
+ /* FIXME: Set errno */
+ return 0;
+ }
+ _PDCLIB_FLUSH_RETRY_PREP;
+ return _PDCLIB_flushbuffer( stream, written, retries + 1 );
+ default:
+ /* If the following assert fails, we wrote more characters than
+ available in the buffer. (???)
+ */
+ assert( written <= stream->bufidx );
+ if ( written == stream->bufidx )
+ {
+ /* write complete */
+ stream->bufidx = 0;
+ return written;
+ }
+ return _PDCLIB_flushbuffer( stream, written, 0 );