home *** CD-ROM | disk | FTP | other *** search
- /* setvbuf.c (emx+gcc) -- Copyright (c) 1990-1993 by Eberhard Mattes */
-
- #include <sys/emx.h>
- #include <stdio.h>
- #include <stdlib.h>
-
- int setvbuf (FILE *stream, char *buffer, int mode, size_t size)
- {
- if (!(stream->flags & _IOOPEN) ||
- (mode != _IONBF && mode != _IOFBF && mode != _IOLBF) ||
- (mode != _IONBF && size <= 0))
- return (EOF);
- fflush (stream);
- if ((stream->flags & _IOBUFMASK) == _IOBUFLIB)
- free (stream->buffer);
- stream->flags &= ~(_IOBUFMASK|_IOLBF|_IOFBF|_IONBF);
- if (mode == _IONBF)
- {
- stream->buf_size = 1;
- stream->buffer = &stream->char_buf;
- stream->flags |= _IONBF|_IOBUFCHAR;
- }
- else if (buffer != NULL)
- {
- stream->buf_size = size;
- stream->buffer = buffer;
- stream->flags |= mode|_IOBUFUSER;
- }
- else
- {
- buffer = malloc (size);
- if (buffer == NULL)
- return (EOF);
- stream->buf_size = size;
- stream->buffer = buffer;
- stream->flags |= mode|_IOBUFLIB;
- }
- stream->ptr = stream->buffer;
- stream->rcount = 0;
- stream->wcount = 0;
- return (0);
- }
-