home *** CD-ROM | disk | FTP | other *** search
/ Super PC 34 / Super PC 34 (Shareware).iso / spc / UTIL / DJGPP2 / V2 / DJLSR200.ZIP / src / libc / ansi / stdio / fwrite.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-16  |  999 b   |  43 lines

  1. /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <libc/file.h>
  6.  
  7. size_t
  8. fwrite(const void *vptr, size_t size, size_t count, FILE *f)
  9. {
  10.   const char *ptr = (const char *)vptr;
  11.   register int s;
  12.  
  13.   s = size * count;
  14.   if (f->_flag & _IOLBF)
  15.     while (s > 0) {
  16.       if (--f->_cnt > -f->_bufsiz && *(const char *)ptr != '\n')
  17.     *f->_ptr++ = *(const char *)ptr++;
  18.       else if (_flsbuf(*(const char *)ptr++, f) == EOF)
  19.     break;
  20.       s--;
  21.     }
  22.   else while (s > 0) {
  23.     if (f->_cnt < s) {
  24.       if (f->_cnt > 0) {
  25.     memcpy(f->_ptr, ptr, f->_cnt);
  26.     ptr += f->_cnt;
  27.     f->_ptr += f->_cnt;
  28.     s -= f->_cnt;
  29.       }
  30.       if (_flsbuf(*(const unsigned char *)ptr++, f) == EOF)
  31.     break;
  32.       s--;
  33.     }
  34.     if (f->_cnt >= s) {
  35.       memcpy(f->_ptr, ptr, s);
  36.       f->_ptr += s;
  37.       f->_cnt -= s;
  38.       return count;
  39.     }
  40.   }
  41.   return size != 0 ? count - ((s + size - 1) / size) : 0;
  42. }
  43.