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);