]> pd.if.org Git - pdclib/blob - functions/stdio/setvbuf.c
va_end() was missing. Fixed.
[pdclib] / functions / stdio / setvbuf.c
1 /* $Id$ */
2
3 /* setvbuf( FILE *, char *, int, size_t )
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 #include <stdlib.h>
11
12 #ifndef REGTEST
13
14 int setvbuf( FILE * _PDCLIB_restrict stream, char * _PDCLIB_restrict buf, int mode, size_t size )
15 {
16     /* TODO: Only allowed on a "virgin" stream; add check. */
17     if ( ( stream->status & ( _IOFBF | _IOLBF | _IONBF ) ) /* Only allowed on "virgin" stream */
18       || ( ( mode != _IOFBF ) && ( mode != _IOLBF ) && ( mode != _IONBF ) ) /* invalid mode */
19       || ( ( buf == NULL ) && ( ( buf = malloc( size ) ) == NULL ) ) /* no memory available */
20     )
21     {
22         return -1;
23     }
24     stream->status |= mode;
25     stream->buffer  = buf;
26     stream->bufsize = size;
27     return 0;
28 }
29
30 #endif
31
32 #ifdef TEST
33 #include <_PDCLIB_test.h>
34
35 int main( void )
36 {
37     TESTCASE( NO_TESTDRIVER );
38     return TEST_RESULTS;
39 }
40
41 #endif