X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstdio%2Fsetvbuf.c;fp=functions%2Fstdio%2Fsetvbuf.c;h=c8d751c397ad5336e4cbfdfa6ac193876b143884;hb=d02f38605b53cdff5460cc6b9e1b2a80c3a2ba4c;hp=0000000000000000000000000000000000000000;hpb=3f6094115e79a45413f08361b68b71eb08da306e;p=pdclib diff --git a/functions/stdio/setvbuf.c b/functions/stdio/setvbuf.c new file mode 100644 index 0000000..c8d751c --- /dev/null +++ b/functions/stdio/setvbuf.c @@ -0,0 +1,43 @@ +/* $Id$ */ + +/* Release $Name$ */ + +/* setvbuf( FILE *, char *, int, size_t ) + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#include +#include + +#ifndef REGTEST + +int setvbuf( FILE * _PDCLIB_restrict stream, char * _PDCLIB_restrict buf, int mode, size_t size ) +{ + /* TODO: Only allowed on a "virgin" stream; add check. */ + if ( ( stream->status & ( _IOFBF | _IOLBF | _IONBF ) ) /* Only allowed on "virgin" stream */ + || ( ( mode != _IOFBF ) && ( mode != _IOLBF ) && ( mode != _IONBF ) ) /* invalid mode */ + || ( ( buf == NULL ) && ( ( buf = malloc( size ) ) == NULL ) ) /* no memory available */ + ) + { + return -1; + } + stream->status |= mode; + stream->buffer = buf; + stream->bufsize = size; + return 0; +} + +#endif + +#ifdef TEST +#include <_PDCLIB_test.h> + +int main( void ) +{ + TESTCASE( NO_TESTDRIVER ); + return TEST_RESULTS; +} + +#endif