1#include "stdio_impl.h" 2#include <string.h> 3 4size_t __fwritex(const unsigned char *restrict s, size_t l, FILE *restrict f) 5{ 6 size_t i=0; 7 8 if (!f->wend && __towrite(f)) return 0; 9 10 if (l > f->wend - f->wpos) return f->write(f, s, l); 11 12 if (f->lbf >= 0) { 13 /* Match /^(.*\n|)/ */ 14 for (i=l; i && s[i-1] != '\n'; i--); 15 if (i) { 16 size_t n = f->write(f, s, i); 17 if (n < i) return n; 18 s += i; 19 l -= i; 20 } 21 } 22 23 memcpy(f->wpos, s, l); 24 f->wpos += l; 25 return l+i; 26} 27 28size_t fwrite(const void *restrict src, size_t size, size_t nmemb, FILE *restrict f) 29{ 30 size_t k, l = size*nmemb; 31 if (!size) nmemb = 0; 32 FLOCK(f); 33 k = __fwritex(src, l, f); 34 FUNLOCK(f); 35 return k==l ? nmemb : k/size; 36} 37 38weak_alias(fwrite, fwrite_unlocked); 39