3 /* fwrite( const void *, size_t, size_t, FILE * )
5 This file is part of the Public Domain C Library (PDCLib).
6 Permission is granted to use, modify, and / or redistribute at will.
12 #include <_PDCLIB_io.h>
13 #include <_PDCLIB_glue.h>
18 size_t _PDCLIB_fwrite_unlocked( const void *restrict vptr,
19 size_t size, size_t nmemb,
20 FILE * _PDCLIB_restrict stream )
22 if ( _PDCLIB_prepwrite( stream ) == EOF )
27 const char *restrict ptr = vptr;
29 for ( nmemb_i = 0; nmemb_i < nmemb; ++nmemb_i )
31 for ( size_t size_i = 0; size_i < size; ++size_i )
33 char c = ptr[ nmemb_i * size + size_i ];
34 stream->buffer[ stream->bufidx++ ] = c;
36 if ( stream->bufidx == stream->bufsize || ( c == '\n' && stream->status & _IOLBF ) )
38 if ( _PDCLIB_flushbuffer( stream ) == EOF )
40 /* Returning number of objects completely buffered */
46 if ( stream->status & _IONBF )
48 if ( _PDCLIB_flushbuffer( stream ) == EOF )
50 /* Returning number of objects completely buffered */
58 size_t fwrite( const void * _PDCLIB_restrict ptr,
59 size_t size, size_t nmemb,
60 FILE * _PDCLIB_restrict stream )
62 _PDCLIB_flockfile( stream );
63 size_t r = _PDCLIB_fwrite_unlocked( ptr, size, nmemb, stream );
64 _PDCLIB_funlockfile( stream );
71 #include <_PDCLIB_test.h>
75 /* Testing covered by fread(). */