]> pd.if.org Git - pdclib/blobdiff - functions/stdio/setvbuf.c
Merged PDPCLIB and Therx code.
[pdclib] / functions / stdio / setvbuf.c
index a65dd8ed2528265395ed99ea4036a1e7c135bf52..2f9b4c48bdef5e2565b5e6ce9e39bdb7c394079b 100644 (file)
@@ -6,3 +6,62 @@
 // ----------------------------------------------------------------------------
 
 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);
+}
+*/