home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / EMXLIB8F.ZIP / EMX / LIB / IO / SETVBUF.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-02  |  1.1 KB  |  43 lines

  1. /* setvbuf.c (emx+gcc) -- Copyright (c) 1990-1993 by Eberhard Mattes */
  2.  
  3. #include <sys/emx.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. int setvbuf (FILE *stream, char *buffer, int mode, size_t size)
  8. {
  9.   if (!(stream->flags & _IOOPEN) ||
  10.       (mode != _IONBF && mode != _IOFBF && mode != _IOLBF) ||
  11.       (mode != _IONBF && size <= 0))
  12.     return (EOF);
  13.   fflush (stream);
  14.   if ((stream->flags & _IOBUFMASK) == _IOBUFLIB)
  15.     free (stream->buffer);
  16.   stream->flags &= ~(_IOBUFMASK|_IOLBF|_IOFBF|_IONBF);
  17.   if (mode == _IONBF)
  18.     {
  19.       stream->buf_size = 1;
  20.       stream->buffer = &stream->char_buf;
  21.       stream->flags |= _IONBF|_IOBUFCHAR;
  22.     }
  23.   else if (buffer != NULL)
  24.     {
  25.       stream->buf_size = size;
  26.       stream->buffer = buffer;
  27.       stream->flags |= mode|_IOBUFUSER;
  28.     }
  29.   else
  30.     {
  31.       buffer = malloc (size);
  32.       if (buffer == NULL)
  33.         return (EOF);
  34.       stream->buf_size = size;
  35.       stream->buffer = buffer;
  36.       stream->flags |= mode|_IOBUFLIB;
  37.     }
  38.   stream->ptr = stream->buffer;
  39.   stream->rcount = 0;
  40.   stream->wcount = 0;
  41.   return (0);
  42. }
  43.