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