*/
#include <stdio.h>
-#include <_PDCLIB_glue.h>
#ifndef REGTEST
+#include <_PDCLIB_io.h>
-int fflush( struct _PDCLIB_file_t * stream )
+extern FILE * _PDCLIB_filelist;
+
+int fflush_unlocked( FILE * stream )
{
- /* FIXME: This is ad-hoc. */
- if ( fwrite( stream->buffer, stream->bufidx, 1, stream ) == stream->bufidx )
+ if ( stream == NULL )
{
- stream->bufidx = 0;
- return 0;
+ stream = _PDCLIB_filelist;
+ /* TODO: Check what happens when fflush( NULL ) encounters write errors, in other libs */
+ int rc = 0;
+ while ( stream != NULL )
+ {
+ if ( stream->status & _PDCLIB_FWRITE )
+ {
+ if ( _PDCLIB_flushbuffer( stream ) == EOF )
+ {
+ rc = EOF;
+ }
+ }
+ stream = stream->next;
+ }
+ return rc;
}
else
{
- stream->status |= _PDCLIB_ERRORFLAG;
- return EOF;
+ return _PDCLIB_flushbuffer( stream );
}
}
+int fflush( FILE * stream )
+{
+ flockfile( stream );
+ int res = fflush_unlocked(stream);
+ funlockfile( stream );
+ return res;
+}
+
#endif
#ifdef TEST
int main( void )
{
- TESTCASE( NO_TESTDRIVER );
+ /* Testing covered by ftell.c */
return TEST_RESULTS;
}