X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=functions%2Fstdio%2Fsetvbuf.c;h=a88a27fa547784313149ac3cd6b86e00537a85fe;hp=a65dd8ed2528265395ed99ea4036a1e7c135bf52;hb=1d9d92ba957a0b8307c9a65c35867fde68e6533b;hpb=34893ecc2200dc7017c36a54cb6c5f4c2378b5ec diff --git a/functions/stdio/setvbuf.c b/functions/stdio/setvbuf.c index a65dd8e..a88a27f 100644 --- a/functions/stdio/setvbuf.c +++ b/functions/stdio/setvbuf.c @@ -1,8 +1,67 @@ -// ---------------------------------------------------------------------------- -// $Id$ -// ---------------------------------------------------------------------------- -// Public Domain C Library - http://pdclib.sourceforge.net -// This code is Public Domain. Use, modify, and redistribute at will. -// ---------------------------------------------------------------------------- +/* ---------------------------------------------------------------------------- + * $Id$ + * ---------------------------------------------------------------------------- + * Public Domain C Library - http://pdclib.sourceforge.net + * This code is Public Domain. Use, modify, and redistribute at will. + * --------------------------------------------------------------------------*/ int setvbuf( FILE * restrict stream, char * restrict buf, int mode, size_t size ) { /* TODO */ }; + +/* 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 +*/ + +int setvbuf(FILE *stream, char *buf, int mode, size_t size) +{ + char *mybuf; + + 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)) + { + stream->quickBin = 0; + } + return (0); +} +*/