X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstdio%2Fsetvbuf.c;h=9d96ad8f8583e3681e8bdfa8d162c613a6231cab;hb=b08f4b52b1cd1f7a9553c0f357a7c90859fa3e73;hp=a88a27fa547784313149ac3cd6b86e00537a85fe;hpb=1d9d92ba957a0b8307c9a65c35867fde68e6533b;p=pdclib diff --git a/functions/stdio/setvbuf.c b/functions/stdio/setvbuf.c index a88a27f..9d96ad8 100644 --- a/functions/stdio/setvbuf.c +++ b/functions/stdio/setvbuf.c @@ -1,67 +1,41 @@ -/* ---------------------------------------------------------------------------- - * $Id$ - * ---------------------------------------------------------------------------- - * Public Domain C Library - http://pdclib.sourceforge.net - * This code is Public Domain. Use, modify, and redistribute at will. - * --------------------------------------------------------------------------*/ +/* $Id$ */ -int setvbuf( FILE * restrict stream, char * restrict buf, int mode, size_t size ) { /* TODO */ }; +/* setvbuf( FILE *, char *, int, size_t ) -/* PDPC code - unreviewed -/* -NULL + F = allocate, setup -NULL + L = allocate, setup -NULL + N = ignore, return success -buf + F = setup -buf + L = setup -buf + N = ignore, return success + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. */ -int setvbuf(FILE *stream, char *buf, int mode, size_t size) -{ - char *mybuf; +#include +#include - if (mode == _IONBF) - { - stream->bufTech = mode; - return (0); - } - if (buf == NULL) - { - if (size < 2) - { - return (-1); - } - mybuf = malloc(size + 8); - if (mybuf == NULL) - { - return (-1); - } - } - else - { - if (size < 10) - { - return (-1); - } - mybuf = buf; - stream->theirBuffer = 1; - size -= 8; - } - free(stream->intBuffer); - stream->intBuffer = mybuf; - stream->fbuf = stream->intBuffer + 2; - *stream->fbuf++ = '\0'; - *stream->fbuf++ = '\0'; - stream->szfbuf = size; - stream->endbuf = stream->fbuf + stream->szfbuf; - *stream->endbuf = '\n'; - stream->upto = stream->endbuf; - stream->bufTech = mode; - if (!stream->textMode && (stream->bufTech == _IOLBF)) +#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 */ + ) { - stream->quickBin = 0; + return -1; } - return (0); + 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