X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstdio%2Fsetvbuf.c;h=9d96ad8f8583e3681e8bdfa8d162c613a6231cab;hb=d9dcf16664c81809258992e1653ecb68c8079974;hp=2f9b4c48bdef5e2565b5e6ce9e39bdb7c394079b;hpb=e5456e3c2697c4e17fc9aa3439f2e305517b4d96;p=pdclib.old diff --git a/functions/stdio/setvbuf.c b/functions/stdio/setvbuf.c index 2f9b4c4..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