]> pd.if.org Git - pdclib/blobdiff - functions/stdio/setvbuf.c
Re-import from Subversion.
[pdclib] / functions / stdio / setvbuf.c
index a65dd8ed2528265395ed99ea4036a1e7c135bf52..a88a27fa547784313149ac3cd6b86e00537a85fe 100644 (file)
@@ -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);
+}
+*/