]> pd.if.org Git - pdclib.old/blob - functions/stdio/setbuf.c
pthread c11 threading backend: add support for thread specific data
[pdclib.old] / functions / stdio / setbuf.c
1 /* $Id$ */
2
3 /* setbuf( FILE *, char * )
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 setbuf( FILE * _PDCLIB_restrict stream, char * _PDCLIB_restrict buf )
14 {
15     if ( buf == NULL )
16     {
17         setvbuf( stream, buf, _IONBF, BUFSIZ );
18     }
19     else
20     {
21         setvbuf( stream, buf, _IOFBF, BUFSIZ );
22     }
23 }
24
25 #endif
26
27 #ifdef TEST
28 #include <_PDCLIB_test.h>
29 #include <stdlib.h>
30 #ifndef REGTEST
31 #include <_PDCLIB_io.h>
32 #endif
33
34 int main( void )
35 {
36     /* TODO: Extend testing once setvbuf() is finished. */
37 #ifndef REGTEST
38     char buffer[ BUFSIZ + 1 ];
39     FILE * fh;
40     /* full buffered */
41     TESTCASE( ( fh = tmpfile() ) != NULL );
42     setbuf( fh, buffer );
43     TESTCASE( fh->buffer == buffer );
44     TESTCASE( fh->bufsize == BUFSIZ );
45     TESTCASE( ( fh->status & ( _IOFBF | _IONBF | _IOLBF ) ) == _IOFBF );
46     TESTCASE( fclose( fh ) == 0 );
47     /* not buffered */
48     TESTCASE( ( fh = tmpfile() ) != NULL );
49     setbuf( fh, NULL );
50     TESTCASE( ( fh->status & ( _IOFBF | _IONBF | _IOLBF ) ) == _IONBF );
51     TESTCASE( fclose( fh ) == 0 );
52 #else
53     puts( " NOTEST setbuf() test driver is PDCLib-specific." );
54 #endif
55     return TEST_RESULTS;
56 }
57
58 #endif