]> pd.if.org Git - pdclib/blob - functions/stdio/_PDCLIB_flushbuffer.c
Minimize the amount of internal definitions which get exposed via the user-visible...
[pdclib] / functions / stdio / _PDCLIB_flushbuffer.c
1 /* _PDCLIB_flushbuffer( struct _PDCLIB_file_t * )\r
2 \r
3    This file is part of the Public Domain C Library (PDCLib).\r
4    Permission is granted to use, modify, and / or redistribute at will.\r
5 */\r
6 \r
7 #include <stdio.h>\r
8 #include <string.h>\r
9 \r
10 #ifndef REGTEST\r
11 #include <_PDCLIB_glue.h>\r
12 #include <_PDCLIB_io.h>\r
13 \r
14 int _PDCLIB_flushbuffer( FILE * stream )\r
15 {\r
16     if ( ! ( stream->status & _PDCLIB_FBIN ) )\r
17     {\r
18         /* TODO: Text stream conversion here */\r
19     }\r
20 \r
21     size_t written = 0;\r
22 \r
23 \r
24     while(written != stream->bufidx) {\r
25         size_t justWrote;\r
26         size_t toWrite = stream->bufidx - written;\r
27         bool res = stream->ops->write( stream->handle, stream->buffer + written, \r
28                               toWrite, &justWrote);\r
29         written += justWrote;\r
30         stream->pos.offset += justWrote;\r
31 \r
32         if(!res) {\r
33             stream->status |=_PDCLIB_ERRORFLAG;\r
34             stream->bufidx -= written;\r
35             memmove( stream->buffer, stream->buffer + written, stream->bufidx );\r
36             return EOF;\r
37         }\r
38     }\r
39 \r
40     stream->bufidx = 0;\r
41     return 0;\r
42 }\r
43 \r
44 #endif\r
45 \r
46 \r
47 #ifdef TEST\r
48 #include <_PDCLIB_test.h>\r
49 \r
50 int main( void )\r
51 {\r
52     /* Testing covered by ftell.c */\r
53     return TEST_RESULTS;\r
54 }\r
55 \r
56 #endif\r
57 \r