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 | }> |