]> pd.if.org Git - pdclib/blob - functions/stdio/clearerr.c
Yet closer to functional output.
[pdclib] / functions / stdio / clearerr.c
1 /* $Id$ */
2
3 /* clearerr( FILE * )
4
5    This file is part of the Public Domain C Library (PDCLib).
6    Permission is granted to use, modify, and / or redistribute at will.
7 */
8
9 #include <stdio.h>
10
11 #ifndef REGTEST
12
13 void clearerr( struct _PDCLIB_file_t * stream )
14 {
15     stream->status &= ~( _PDCLIB_ERRORFLAG | _PDCLIB_EOFFLAG );
16 }
17
18 #endif
19
20 #ifdef TEST
21 #include <_PDCLIB_test.h>
22
23 int main( void )
24 {
25 #ifndef REGTEST
26     FILE file = { 0, { 0 }, NULL, 0, 0, 0, NULL };
27     FILE * fh = &file;
28     TESTCASE( ! ferror( fh ) );
29     TESTCASE( ! feof( fh ) );
30     fh->status |= _PDCLIB_ERRORFLAG;
31     TESTCASE( ferror( fh ) );
32     TESTCASE( ! feof( fh ) );
33     clearerr( fh );
34     TESTCASE( ! ferror( fh ) );
35     TESTCASE( ! feof( fh ) );
36     fh->status |= _PDCLIB_EOFFLAG;
37     TESTCASE( ! ferror( fh ) );
38     TESTCASE( feof( fh ) );
39     clearerr( fh );
40     TESTCASE( ! ferror( fh ) );
41     TESTCASE( ! feof( fh ) );
42     fh->status |= _PDCLIB_EOFFLAG | _PDCLIB_ERRORFLAG;
43     TESTCASE( ferror( fh ) );
44     TESTCASE( feof( fh ) );
45     clearerr( fh );
46     TESTCASE( ! ferror( fh ) );
47     TESTCASE( ! feof( fh ) );
48 #else
49     /* TODO: The above is ad-hoc and PDCLib specific. A better test driver
50        should be internals-agnostic (provoking the error / eof flag by
51        "regular" operations).
52     */
53     TESTCASE( NO_TESTDRIVER );
54 #endif
55     return TEST_RESULTS;
56 }
57
58 #endif