#include <stdio.h>
#ifndef REGTEST
-
+#include <_PDCLIB_io.h>
#include <_PDCLIB_glue.h>
#include <stdbool.h>
//TODO OS(2012-08-01): Ascertain purpose of lineend & potentially remove
-size_t fwrite( const void * _PDCLIB_restrict ptr, size_t size, size_t nmemb, struct _PDCLIB_file_t * _PDCLIB_restrict stream )
+size_t fwrite_unlocked( const void * _PDCLIB_restrict ptr,
+ size_t size, size_t nmemb,
+ FILE * _PDCLIB_restrict stream )
{
if ( _PDCLIB_prepwrite( stream ) == EOF )
{
return nmemb_i;
}
//lineend = false;
+ /*
+ * The entire buffer has been flushed; this means we have to
+ * reset our newline position as we have already written
+ * that part of the stream.
+ */
+ offset = 0;
}
}
}
return nmemb_i;
}
+size_t fwrite( const void * _PDCLIB_restrict ptr,
+ size_t size, size_t nmemb,
+ FILE * _PDCLIB_restrict stream )
+{
+ flockfile( stream );
+ size_t r = fwrite_unlocked( ptr, size, nmemb, stream );
+ funlockfile( stream );
+ return r;
+}
+
#endif
#ifdef TEST