Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4973 right-hear 1
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
2
#include 
3
#include 
4
#include 
5
#include 
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
 
15
//  __libclog_printf("fwrite(%x,%u,%u,%u)\n",vptr,size,count,f->_file);
16
 
17
  if (f->_flag & _IOLBF)
18
    while (s > 0) {
19
      if (--f->_cnt > -f->_bufsiz && *(const char *)ptr != '\n')
20
	*f->_ptr++ = *(const char *)ptr++;
21
      else if (_flsbuf(*(const char *)ptr++, f) == EOF)
22
	break;
23
      s--;
24
    }
25
  else while (s > 0) {
26
    if (f->_cnt < s) {
27
      if (f->_cnt > 0) {
28
	memcpy(f->_ptr, ptr, f->_cnt);
29
	ptr += f->_cnt;
30
	f->_ptr += f->_cnt;
31
	s -= f->_cnt;
32
      }
33
      if (_flsbuf(*(const unsigned char *)ptr++, f) == EOF)
34
	break;
35
      s--;
36
    }
37
    if (f->_cnt >= s) {
38
      memcpy(f->_ptr, ptr, s);
39
      f->_ptr += s;
40
      f->_cnt -= s;
41
      return count;
42
    }
43
  }
44
  return size != 0 ? count - ((s + size - 1) / size) : 0;
45
}