#include "stdio_impl.h" #include 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);