1234567891011121314151617181920212223242526272829303132333435363738 |
- #include "stdio_impl.h"
- #include <string.h>
- size_t __fwritex(const unsigned char *restrict s, size_t l, FILE *restrict f)
- {
- size_t i=0;
- if (!f->wend && __towrite(f)) return 0;
- if (l > f->wend - f->wpos) return f->write(f, s, l);
- if (f->lbf >= 0) {
- /* Match /^(.*\n|)/ */
- for (i=l; i && s[i-1] != '\n'; i--);
- if (i) {
- size_t n = f->write(f, s, i);
- if (n < i) return n;
- s += i;
- l -= i;
- }
- }
- memcpy(f->wpos, s, l);
- f->wpos += l;
- return l+i;
- }
- size_t fwrite(const void *restrict src, size_t size, size_t nmemb, FILE *restrict f)
- {
- size_t k, l = size*nmemb;
- if (!size) nmemb = 0;
- FLOCK(f);
- k = __fwritex(src, l, f);
- FUNLOCK(f);
- return k==l ? nmemb : k/size;
- }
- weak_alias(fwrite, fwrite_unlocked);
|