]> pd.if.org Git - pdclib/blob - functions/stdio/clearerr.c
20af80f298b4a1e792e6e8de80b5cce58f4e977a
[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 #include <_PDCLIB_io.h>
13
14 void clearerr_unlocked( FILE * stream )
15 {
16     stream->status &= ~( _PDCLIB_ERRORFLAG | _PDCLIB_EOFFLAG );
17 }
18
19 void clearerr( FILE * stream )
20 {
21     flockfile( stream );
22     clearerr_unlocked( stream );
23     funlockfile( stream );
24 }
25
26 #endif
27
28 #ifdef TEST
29 #include <_PDCLIB_test.h>
30
31 int main( void )
32 {
33     FILE * fh;
34     TESTCASE( ( fh = tmpfile() ) != NULL );
35     /* Flags should be clear */
36     TESTCASE( ! ferror( fh ) );
37     TESTCASE( ! feof( fh ) );
38     /* Reading from input stream - should provoke error */
39     /* FIXME: Apparently glibc disagrees on this assumption. How to provoke error on glibc? */
40     TESTCASE( fgetc( fh ) == EOF );
41     TESTCASE( ferror( fh ) );
42     TESTCASE( ! feof( fh ) );
43     /* clearerr() should clear flags */
44     clearerr( fh );
45     TESTCASE( ! ferror( fh ) );
46     TESTCASE( ! feof( fh ) );
47     /* Reading from empty stream - should provoke EOF */
48     rewind( fh );
49     TESTCASE( fgetc( fh ) == EOF );
50     TESTCASE( ! ferror( fh ) );
51     TESTCASE( feof( fh ) );
52     /* clearerr() should clear flags */
53     clearerr( fh );
54     TESTCASE( ! ferror( fh ) );
55     TESTCASE( ! feof( fh ) );
56     TESTCASE( fclose( fh ) == 0 );
57     return TEST_RESULTS;
58 }
59
60 #endif
61