home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Mint / mntlib32.zoo / getbuf.c < prev    next >
C/C++ Source or Header  |  1992-09-05  |  792b  |  33 lines

  1. /* from the dLibs getbuf.c */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6.  
  7. extern size_t __DEFAULT_BUFSIZ__;
  8.  
  9. void _getbuf(fp)        /* allocate a buffer for a stream */
  10.     register FILE *fp;
  11.     {
  12.     unsigned int f = fp->_flag;
  13.  
  14.     if(f & _IOLBF)
  15.         fp->_bsiz = (__DEFAULT_BUFSIZ__ < BUFSIZ) ? __DEFAULT_BUFSIZ__ :
  16.                             BUFSIZ;
  17.     else
  18.         fp->_bsiz = __DEFAULT_BUFSIZ__;
  19.  
  20.     if((f & _IONBF) /* risky!! but works ok with gnu.may change */
  21.         || ((fp->_base = (unsigned char *)malloc((size_t)fp->_bsiz)) == 0) )
  22.         {
  23.         fp->_flag &= ~(_IOFBF | _IOLBF | _IONBF);
  24.         fp->_flag |= _IONBF;
  25.         fp->_base = &(fp->_ch);            /* use tiny buffer */
  26.         fp->_bsiz = 1;
  27.         }
  28.     else
  29.         fp->_flag |= _IOMYBUF;            /* use big buffer */
  30.     fp->_ptr = fp->_base;
  31.     fp->_cnt = 0;        /* start out with an empty buffer */
  32.     }
  33.