github.com/afumu/libc@v0.0.6/musl/src/stdio/fwrite.c (about) 1 #include "stdio_impl.h" 2 #include <string.h> 3 4 size_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 28 size_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 38 weak_alias(fwrite, fwrite_unlocked);